Lua-i18nで作業しています。ユーザーが関心のある機能を持つプロジェクトをコンパイルできるようにMakefileを変更しようとしています。つまりMakefileは対応するコードを無効にするCマクロを定義しています。 Makefileでそれを定義することは簡単ですが、このように定義されたフィーチャにリンクされた不要なコンパイルの依存関係を取り除くことは、移植性を目標とする場合にはあまり意味がありません。実際、このプロジェクトでは、できるだけ元のコードを修正し、可能な限り少ない依存性を追加することを目指しています。Makefileに移植性のあるoptionnal依存性を持たせる移植可能な方法はありますか?
ので、ここでは、プロセス
- http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html
- http://www.netbsd.org/docs/pkgsrc/makefile.html
- http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386
- http://gallium.inria.fr/blog/portable-conditionals-in-makefiles/
- https://docs.google.com/document/d/1oUR7iMnaNzkeT3TTOS-Gwul6_V3TE8caIDAd1FwPyNc/edit#
- https://www.gnu.org/software/make/manual/html_node/Conditional-Syntax.html で見つかったいくつかの関連リンクですここ
- https://www.mkssoftware.com/docs/man5/makefile.5.asp
GNUのメイクではFedora 24デスクトップ上で動作するようですソリューションです。しかし、私は、そのようなソリューションが、(合理的に現代的な)あらゆる実装でうまくいくかどうかを知りたいと思っています。
cflag= -D CODE_SWITCH
resolved_conditional_cflag!= test -n "$(cflag)" && echo "$(cflag)"
conditional_dep= additional_dep.c
mandatory_dep= dep0.c dep1.c
resolved_conditional_dep!= test -n "$(cflag)" && echo "$(conditional_dep)"
all_dep= $(mandatory_dep) $(resolved_conditional_dep)
all: target
@echo building code with flag $(resolved_conditional_cflag)
@echo ${SHELL}
target: $(all_dep)
@echo building [email protected] which depends on $(all_dep)
dep0.c:
@echo building dep0.c
dep1.c:
@echo building dep1.c
additional_dep.c:
@echo building [email protected]
アイデアは、ユーザーが行cflag= -D CODE_SWITCH
コメントということであり、それがすべてです、コンパイラは、関連する依存関係を処理しません。だから、そのようなソリューションは移植可能でしょうか?これは、シェル拡張!=
とtest
コマンドに依存しています。私は最後のものがPOSIXかもしれないと思うが、私は間違っているかもしれない。より一般的には、私がここで気づいていない移植性の問題かもしれません。
この特定の要求に対しては、「CMake、autotoolsなどを使用する」は望ましい回答ではありません。
必要なシステムで、いくつかのシェルコードと '$(MAKE)conditional-target'を手動で使用することもできますか?まだシェルコードを使用しているので理想的ではありませんが、少なくとも!= 'よりも移植性があります。 –
私はあなたが何を示唆しているか分かりません。条件付きの前提条件を 'all_dep'変数から完全に残しておき、' target'をビルドするためのレシピで 'test -n" $(cflags) "&& $(MAKE)$(conditional_dep)'を実行すると、リンクコマンドを実際に実行する前にそれはあなたが念頭に置いたことですか?作者が 'cflags'ではなく全く異なる変数を使用することを喜んでいたら、それは再帰的マクロではかなり簡単に行うことができます。 – MadScientist
はい、それは私の考えです。申し訳ありませんが私の意図ではっきりしていませんでした。そのような解決策に問題はありますか? 'test'はすでに使用されているので、このアイデアは潜在的なポータブルな解決策であると私は思っていますが、発生する可能性があるいくつかの問題については盲目的かもしれません。 –