我正在尝试使用make实用程序编译大量文件。在运行之间,我多次得到以下错误
<command-line>: error: macro names must be identifiers
由于我使用-j选项,因此日志显示随机线程的输出。因此,很难确定遇到此错误的实际文件。也不会弹出其他错误。有人可以告诉我这个错误究竟是什么意思?
答案 0 :(得分:2)
这不是来自make
的错误消息,而是来自预处理器(由make
调用)的错误消息。
正如其他人所说的那样,运行make
而不使用-j
选项(从开始,或make -j
失败后),以更清楚地查看错误源自何处。
答案 1 :(得分:2)
这是来自C预处理器。当您将-D开关传递给带有无效符号或根本没有符号的gcc时,通常会发生这种情况。
根本原因可能是你的makefile中的一行,如
CFLAGS=-g -D$(DEBUG)
或类似的东西,其中DEBUG实际上并未在任何地方定义。
答案 2 :(得分:0)
并非所有Makefile
都可以使用-j
进行编译。有时您只需要多次运行make -j
,然后项目将一直构建到最后。而且,一旦失败,您就可以随时取消-j
,并尝试在任何时候使用单个流程完成构建。在尝试调试某些东西时,这可以极大地减少不可预测性,同时仍然对编译器使用并行构建作业(或者几乎所有,如果你很幸运)。
我无法追踪make(1)
中构成标识符的内容,但在大多数语言中,限制通常都是这样的:“第一个字符必须是[a-zA-Z],所有其他字符必须是[a-zA-Z0-9_]“。我想make(1)
的规则是相似的。