add_definitions添加的定义在cmake执行时就已经确定,如果想要在make执行时定义它们怎么办? 这些定义的值将是自定义命令的输出。
add_definitions添加的定义在cmake执行时就已经确定,如果想要在make执行时定义它们怎么办? 这些定义的值将是自定义命令的输出。
这是一个makefile的例子:
.SUFFIXES: .c.o CC = cc INCLUDE = -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 # 发布 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
。根据您正在进行的调试或发布构建取消注释另一个标志。
上面的示例是我教程中用于构建名为myapp
的可执行文件的makefile,它由mysource.c
、myroutines1.c
和myroutines2.c
组成。它展示了make如何智能地构建可执行文件而无需重新编译。
注意:该makefile具有Unix/Linux方向性,并且对制表符/空格非常严格,这在上面的示例中不会显示出来!
希望这可以帮助到您, 最好的问候, 汤姆。
我不确定我理解这个问题,但是...
也许你可以使用一个额外的宏来提供命令行C编译器标志,例如:
CFLAGS= <whatever>
CFLAGS2= #nothing
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
然后,当你发出make
命令时,请提供一个"CFLAGS2=xxx"
的命令行参数,它会覆盖makefile中的默认设置。
更新
是的,我没有理解OP的问题。敬请忽略。