2011-03-28 39 views
1

我尝试编译大量使用make程序文件。在运行之间我收到以下错误多次<命令行>:错误:在生成文件

<command-line>: error: macro names must be identifiers 

由于我使用的-j选项的日志显示,从随机线程输出。所以遇到这个错误的实际文件很难确定。也没有其他错误弹出。有人可以告诉我,这个错误试图表明什么?

+0

那是什么导致错误的行? :) – sarnold 2011-03-28 06:31:13

+0

实际上工作并行完成,所以从输出日志中不可能找出导致这种情况发生的原因。可能是如果我可以知道这个错误实际上在makefile的情况下意味着什么,我可以找出它出现的原因 – Pein 2011-03-28 06:36:32

回答

0

并非所有Makefile s为准备与-j编译。有时你只需要在项目完成之前多次运行make -j。你可以随时起飞-j一旦它抛出一个失败,并尝试在任何时间飞行的单一的过程中完成的构建。当试图调试某些东西时,这可以极大地减少不可预测性,同时仍然使用并行构建作业来编译某些(或几乎全部,如果幸运的话)编译。

我在追查什么构成make(1)中的标识符时遇到了问题,但在大多数语言中,限制通常沿着这样的路线:“第一个字符必须是[a-zA-Z],所有其他字符必须是[ A-ZA-Z0-9_]”。我想像make(1)的规则是相似的。

2

这不是make的错误消息,而是来自预处理器(由make调用)。 正如其他人所说,运行make而没有-j选项(无论是从一开始,还是在make -j失败后)都可以更清楚地了解错误的来源。

2

这是从C的预处理器。它通常发生在你将一个-D开关传递给gcc时,一个无效符号或没有符号。

的根本原因可能是像

CFLAGS=-g -D$(DEBUG) 

或类似的东西,在DEBUG实际上没有任何地方定义在你的makefile一条线。