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

时间:2009-12-11 21:48:14

标签: build-process makefile cmake

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

3 个答案:

答案 0 :(得分:3)

您可以在此处找到一些有用的技巧:How to run a command at compile time within Makefile generated by CMake?

答案 1 :(得分:-3)

以下是make文件的示例:

.SUFFIXES: .c.o
CC = cc
INCLUDE = -I/usr/include -I/usr/sys/include
# Comment out one or the other, mutually exclusive
CFLAGS = -g # Debugging info
#CFLAGS = -O2 # Optimize code
LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # Debugging libs
#LIBS = -L/usr/lib # Release
FILES = mysource.o myroutines1.o myroutines2.o
APP = myapp
.c.o:
     $(CC) $(INCLUDE) $(CFLAGS) -c $<

all : $(APP)

$(APP) : $(FILES)
     $(CC) -o $@ $(FILES) $(LIBS) $(CFLAGS)

clobber : clean mrproper

clean:
     rm -rf $(FILES)

mrproper:
     rm -rf $(APP)

注意如何定义标志CFLAGS。如果您正在进行调试或发布构建,请注释掉另一个。

以上示例适用于我的教程中的make文件,用于构建名为myapp的可执行文件,该文件由mysource.cmyroutines1.cmyroutines2.c组成。它显示 make 如何足够智能,无需重新编译即可构建可执行文件。

注意 makefile具有unix / linux方向,并且在上面的示例中没有显示的选项卡/空格上非常严格!

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:-5)

我不确定我理解这个问题,但是......

也许您可以使用额外的宏来提供命令行C编译器标志,例如:

CFLAGS=  <whatever>
CFLAGS2= #nothing  

.c.o:
    $(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<

然后,当您发出make命令时,请提供"CFLAGS2=xxx"命令行参数,该参数将覆盖makefile中的默认设置。

<强>更新

是的,我不明白OP的问题。好心无视。