我在我的C文件和reading中使用了一堆assert()
函数我已经完成了我应该能够通过传递命令行参数来禁用断言:
make
执行此操作不会禁用断言。但是,添加到代码#define NDEBUG
会禁用断言。我想从命令行禁用它们,有没有任何理由说明此标志无法正常工作。
我在Windows机器上。
这是makefile:
OPTIONS = -B CFLAGS=-DNDEBUG -ansi -pedantic -Wall -Werror
a.out: myProgram.o StudentImplementation.o ListImplementation.o
gcc $(OPTIONS) myProgram.o StudentImplementation.o ListImplementation.o
myProgram.o: myProgram.c StudentInterface.h StudentType.h ListInterface.h ListType.h
gcc $(OPTIONS) -c myProgram.c
StudentImplementation.o: StudentImplementation.c StudentInterface.h StudentType.h
gcc $(OPTIONS) -c StudentImplementation.c
ListImplementation.o: ListImplementation.c ListInterface.h ListType.h StudentInterface.h StudentType.h
gcc $(OPTIONS) -c ListImplementation.c
clean:
rm *.o a.out
答案 0 :(得分:4)
如果您有正常的makefile或没有makefile,那么您需要的命令是
make -B CFLAGS=-DNDEBUG
标准制作配方中没有FLAG
变量;每个组件都有自己的变量,因此CFLAGS
用于C,CXXFLAGS
用于C ++,LDFLAGS
用于链接器,依此类推。
使用您在问题中提供的Makefile
,您无法更改make
命令行上的标记。你可以用
OPTIONS = -DNDEBUG -ansi -pedantic -Wall -Werror
但这意味着每次要更改调试设置时都要编辑Makefile。
答案 1 :(得分:1)
你只需要
OPTIONS = -DNDEBUG -ansi -pedantic...
然而,更简单的Makefile看起来像这样
CFLAGS = -DNDEBUG -ansi -pedantic -Wall -Werror -I.
a.out: myProgram.o StudentImplementation.o ListImplementation.o
clean:
rm *.o a.out
答案 2 :(得分:0)
根据我的Unix makefile经验,默认标志应该是CFLAGS,除非你的makefile中明确使用了FLAG。但是,不建议在命令行上定义CFLAGS,因为它是overriding a make variable。
编译器调用中是否有-DNDEBUG调用?如果没有,那么问题就在于Makefile本身,你必须提供相关的数据