Makefile は Linux システムで一般的に使用されるファイル形式です。これを使用してプログラムのコンパイル プロセスと依存関係を記述することができるため、ユーザーは make コマンドを簡単に使用してプログラムを構築および管理できます。 Makefile の構文とルールは比較的単純ですが、注意が必要な詳細と特殊なケースがいくつかあります。そうしないと、コンパイルが失敗したり、予期しない結果が発生したりする可能性があります。この記事では、Linux で Makefile をより適切に使用および作成できるように、Linux Makefile の一般的なエラーとトラップ、およびそれらを回避および解決する方法を紹介します。
結果: 変数の値は割り当てられたものではありませんが、値とコメント文字の間のスペースが変数に割り当てられるため、意図に反して実行され、検出するのは容易ではありません。
例の説明は次のとおりです (Makefile バージョン: GNU MAKE 3.81):
リーリー リーリー拡張 1:実際、検証プロセスは別のトラップ、ifeq() ステートメントのトラップにもつながります。トラップ 2
拡張 2: 変数の割り当てを参照してください。ステートメントにはこの罠がありますが、マクロ定義ステートメントについてはどうでしょうか?および次のようなステートメント
実際、実際のテストでは、これがソース ファイル内のマクロ定義 "TMP" の値および "INCFLAGS" のパス値に影響を与えないことが示されています。
経験: 上記の検証により、コメント文字は Makefile ファイル内で定義された変数の値に影響しますが、-D と -I 以降の値には影響しません。したがって、 同様の問題を避けるために、Makefile 内のコメントはステートメントの後ろではなく、ステートメントの前の行に記述することをお勧めします。
例の説明は次のとおりです (Makefile バージョン: GNU MAKE 3.81):
リーリー
実際のテストによると、$(TmpDir) の後のスペースは効果がないことが示されていますが、/Source の後のスペースは影響を及ぼします。
経験: Makefile では、パラメータの整合性、スペースの有無などを確保するのが最善です。C 言語などの言語でのプログラミングほど緩くはありません。
例はおおよそ次のとおりです:
リーリー
クリックして .d 依存関係ファイル関連コンテンツの紹介を入力してください実際、結果から、.d 依存関係ファイルに問題があると大まかに推測できます。これは、ファイルの書き換えは再コンパイルできる必要があり、これが .d 依存関係ファイルが想定している機能であるためです。与えること。
陷阱:目标路径的问题,即同一文件目标的引用时要保持路径一致。mingw环境下,windows路径(e.g. c:\agc.o) 和 mingw路径(/c/agc.o)都能够识别,对于make而言, c:\abc.o 和 /c/abc.o 是两个不同的目标。若要是不知道这一知识要点,很难发现 .d 文件开头 c:\ 和 /c/ 的区别。(个人疑点:同一环境,不同工程,有些生成的.d依赖文件中.o目标路径和make中引用的路径是一样的,目前也不知是什么原因,总之这个陷阱还是存在的。)
实例陷阱说明:
#以下行将导入所有的.d依赖文件的内容,即以 /c/...开头的内容 -include $(APPDEPS) #而以下目标依赖关系中,指明目标的路径则是以 c:\...开头的路径 $(DEV_BLD_DIR)/%.o: %.c #其结果就是导致了因路径表示的不同,而认为不是同一目标的情况出现 #使得make不能找到.o目标文件依赖的所有依赖源文件,其中包括.h头文件 #自然而然,也就不能因为.h文件的更新,而重新编译对应的.c文件来生成.o文件
解决方法:
既然知道了陷阱所在,就可以利用如下命令来解决该问题:
#通过增加sed命令,把生成的.d依赖文件中的.o目标路径改写就可以了。 $(DEV_BLD_DIR)/%.o: %.c $(info Compiling $$@) $(CFLAGS) $(INCFLAGS) $'s,.*\.o[ :]*,$@:,g' $(DEV_BLD_DIR)/$*.d;\ rm -f $(DEV_BLD_DIR)/$*.d.tmp @echo
通过本文,你应该对 Linux Makefile 中的一些注意事项有了一个基本的了解,知道了如何避免和解决一些常见的错误和陷阱,如变量赋值、条件判断、目标文件、伪目标、自动变量等。你也应该明白了 Makefile 的作用和优点,以及如何在 Linux 下正确地使用和编写 Makefile。我们建议你在使用 Makefile 时要遵循一些规范和习惯,如使用缩进、注释、通配符等,以提高 Makefile 的可读性和可维护性。同时,我们也提醒你在使用 Makefile 时要注意一些潜在的问题和挑战,如跨平台、并行编译、递归调用等。希望本文能够帮助你更好地使用 Linux 系统,让你在 Linux 下编写出高效和优雅的 Makefile。
以上がLinux Makefile の「すべきこと」と「してはいけないこと」: よくある間違いと落とし穴を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。