假设有一个这样的文件(1.c):
all: obj1 \
obj2 \
obj3
通过gcc预处理器处理此文件,如下所示:
gcc -E 1.c
# 1 "1.c"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "1.c"
all: obj1
obj2
obj3
已删除所有行继续符('\')。 是否有选项可以在gcc中保留行继续符?
上面的文件不是有效的C程序,我只把它作为一个例子。我在构建Emacs 22.1时遇到了类似的情况:Emacs 22.1中的makefile由C预处理器处理。
我的操作系统是Ubuntu 14.04,gcc版本是4.8.2
我通过将行继续符替换为指定字符串来绕过此问题,然后在预处理器之后将其还原。我正在寻找一个“优雅”的解决方案。
答案 0 :(得分:3)
也许gcc&#39; s traditional preprocessor mode会奏效。试试gcc -E -traditional
。
它不会完全按照你的要求行事;它将加入这些行,以便:
all: obj1 \
obj2 \
obj3
变为:
all: obj1 obj2 obj3
但是那个输出仍然是一个有效的Makefile。
传统模式有another advantage for Makefiles:
输入文件中的水平空格形式保留在 输出。特别是,硬标签仍然是硬标签。这可以 例如,如果您正在预处理Makefile,则非常有用。
Makefile可能是为这种模式设计的。
答案 1 :(得分:1)
也许你可以在每一个前面加上另一个反斜杠? 我不确定,但它可以解决你的问题。
all: obj1 \\
obj2 \\
obj3