如何使用CMake在编译时定义编译器标志?

Łuk*_*Lew 12 build-process makefile cmake

add_definitions添加了在执行cmake(not make)时修复的定义.执行make(而不是cmake)时如何定义它们?定义的值将是自定义命令的输出.

t0m*_*13b -4

下面是一个 make 文件的示例:

.后缀:.co
抄送=抄送
包含 = -I/usr/include -I/usr/sys/include
# 注释掉其中之一,互斥
CFLAGS = -g # 调试信息
#CFLAGS = -O2 # 优化代码
LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # 调试库
#LIBS = -L/usr/lib # 发布
文件 = mysource.o myroutines1.o myroutines2.o
应用程序=我的应用程序
.co:
     $(CC) $(包括) $(CFLAGS) -c $<

全部:$(APP)

$(应用程序):$(文件)
     $(CC) -o $@ $(文件) $(LIBS) $(CFLAGS)

破坏者:干净的 mrproper

干净的:
     rm -rf $(文件)

正确先生:
     rm -rf $(应用程序)

请注意该标志CFLAGS是如何定义的。注释掉另一个,具体取决于您是否正在进行调试或发布构建。

上面的示例是我的教程中的一个 make 文件,用于构建一个名为的可执行文件,myapp该可执行文件由mysource.c,myroutines1.c和组成myroutines2.c。它展示了make如何足够智能地构建可执行文件而无需重新编译。

注意makefile 具有 unix/linux 方向,并且对制表符/空格非常严格,而这些在上面的示例中没有显示!

希望这有帮助,最诚挚的问候,汤姆。

  • 我不是 OP,这有点晚了……但是……我想 OP(像我自己一样)正在寻找一个 CMake 命令,在自动生成的 Makefile 中实现此逻辑。手动编辑 Makefile 不是一个选项。 (6认同)