【问题标题】:Preprocessor directives in linux makefilelinux makefile中的预处理器指令
【发布时间】:2015-06-11 13:37:04
【问题描述】:

如何在 g++ 编译器的 linux makefile 中使用 #define 和 !include 等命令? 我的理解是 # 创建了一个注释行,所以 #define 不会只是一个注释吗? 感谢您的帮助

【问题讨论】:

  • 你不要把它们放在makefile中。你把它们放在.c/.cc/.cxx/etc 中。文件。
  • 我不希望尽可能多地更改 .cpp 文件,我希望更改 !IFDEF 和 !INCLUDE 的等效项,我编辑了问题
  • 您想在命令行上定义值吗?那是-D。您还可以使用-include 我相信从命令行包含文件。
  • 如果你真的想使用'#'然后用反斜杠转义它......即:\#define

标签: linux makefile c-preprocessor


【解决方案1】:

我通常在文件顶部定义一个变量,并将其设置为等于我想要的 #define 值,如下所示:

DEFINES=-DSOMETHING -DSOMETHING_ELSE

对于包含,g++ 接受来自带有-I 的命令行的搜索路径。 对于makefile,您可以做同样的事情,只需创建一个变量并添加路径:

INCLUDES=-I/path -I/path2

makefile 然后将编译器调用为

g++ $(DEFINES) $(INCLUDES) file.cpp 

【讨论】:

  • 术语挑剔:只有新手才称它为 DEFINES。正确的词是“宏”。或者你也会说“fors”而不是“loops”?
  • 是的,只是与 OP 保持一致的条款。
【解决方案2】:

看看这个例子

# I am a comment, and I want to say that the variable CC will be
# the compiler to use.
CC=g++
# Hey!, I am comment number 2. I want to say that CFLAGS will be the
# options I'll pass to the compiler.
CFLAGS=-c -Wall

all: hello

hello: main.o factorial.o hello.o
    $(CC) main.o factorial.o hello.o -o hello

main.o: main.cpp
    $(CC) $(CFLAGS) main.cpp

factorial.o: factorial.cpp
    $(CC) $(CFLAGS) factorial.cpp

hello.o: hello.cpp
    $(CC) $(CFLAGS) hello.cpp

clean:
    rm *o hello

有关更多信息,请查看以下内容:

http://mrbook.org/blog/tutorials/make/

http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html

【讨论】:

  • edit 提供更多信息。纯代码和“试试这个”的答案是discouraged,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。我们在这里努力成为知识的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2017-11-30
  • 2023-03-05
相关资源
最近更新 更多