FLAG=-DNDEBUG 不禁用 c 中的 assert()
FLAG=-DNDEBUG not disabling assert() in c
我有一堆 assert()
我在我的 C 文件中使用的函数,从 reading 我已经完成了我应该能够通过传入命令行参数来禁用断言,如下所示:
make
这样做不会禁用断言。但是,在代码中添加 #define NDEBUG
确实会禁用断言。不过,我想从命令行禁用它们,是否有任何原因导致此标志无法正常工作。
我在 Windows 机器上。
这是生成文件:
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
如果你有一个普通的makefile或者没有makefile,那么你想要的命令是
make -B CFLAGS=-DNDEBUG
标准制作配方中没有FLAG
变量;每个组件都有自己的变量,因此 CFLAGS
用于 C,CXXFLAGS
用于 C++,LDFLAGS
用于链接器,依此类推。
使用您在问题中提供的 Makefile
,您无法更改 make
命令行上的标志。你可以使用
OPTIONS = -DNDEBUG -ansi -pedantic -Wall -Werror
但这意味着每次要更改调试设置时都要编辑 Makefile。
根据我的 Unix makefile 经验,默认标志应该是 CFLAGS,当然除非 FLAG 在您的 makefile 中明确使用。但是不推荐在命令行上定义 CFLAGS,因为它是 overriding a make variable.
编译器调用中是否有任何-DNDEBUG?如果不是,可能是Makefile本身的问题,需要你提供相关数据
你只需要
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
我有一堆 assert()
我在我的 C 文件中使用的函数,从 reading 我已经完成了我应该能够通过传入命令行参数来禁用断言,如下所示:
make
这样做不会禁用断言。但是,在代码中添加 #define NDEBUG
确实会禁用断言。不过,我想从命令行禁用它们,是否有任何原因导致此标志无法正常工作。
我在 Windows 机器上。
这是生成文件:
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
如果你有一个普通的makefile或者没有makefile,那么你想要的命令是
make -B CFLAGS=-DNDEBUG
标准制作配方中没有FLAG
变量;每个组件都有自己的变量,因此 CFLAGS
用于 C,CXXFLAGS
用于 C++,LDFLAGS
用于链接器,依此类推。
使用您在问题中提供的 Makefile
,您无法更改 make
命令行上的标志。你可以使用
OPTIONS = -DNDEBUG -ansi -pedantic -Wall -Werror
但这意味着每次要更改调试设置时都要编辑 Makefile。
根据我的 Unix makefile 经验,默认标志应该是 CFLAGS,当然除非 FLAG 在您的 makefile 中明确使用。但是不推荐在命令行上定义 CFLAGS,因为它是 overriding a make variable.
编译器调用中是否有任何-DNDEBUG?如果不是,可能是Makefile本身的问题,需要你提供相关数据
你只需要
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