我正在使用多年前其他人创建的400行Linux makefile对多平台C ++项目进行细微更改。
makefile中的两行使用-dndebug
(小写)作为g ++的命令行参数。
我认为目的是定义ndebug
符号,但是当它是小写时,参数甚至可以做任何事情吗?
我对g ++和make的了解很少但是,通过下面链接的页面,我认为论证需要大写才能工作。
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
答案 0 :(得分:14)
是的,它应该是大写,如-DNDEBUG
。
-D
是定义宏的GCC选项。 NDEBUG
是被定义为根据C标准强制关闭断言的宏。
我对g ++和make的知识很少,但是,通过下面链接的页面,我认为论证需要大写才能工作。
对于-dndebug
,由于宏区分大小写,我认为它不会有任何影响,即它应该被忽略,除非你有一些引用它的代码。
答案 1 :(得分:6)
测试相当容易:
$ cat test.cpp
#include <iostream>
int main()
{
#ifdef TEST_DEFINE
std::cout << "defined" << std::endl;
#endif
return 0;
}
$ g++ -o 1 -DTEST_DEFINE test.cpp
$ ./1
defined
$ g++ -o 2 -dTEST_DEFINE test.cpp
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: S [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: _ [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: F [enabled by default]
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default]
$ ./2
$
因此,您可以看到-d
选项实际上会导致编译器警告,因此看起来-D
就是预期的。