我正在使用多年前其他人创建的400行Linux makefile对多平台C++项目进行微小的更改.
makefile中的两行使用-dndebug
(小写)作为g ++的命令行参数.
我认为目的是定义ndebug
符号,但是当它是小写时,参数甚至可以做任何事情吗?
我对g ++和make的知识很少,但是,通过下面链接的页面,我认为论证需要大写才能工作.
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
是的,这应该是大写的-DNDEBUG
.
-D
是定义宏的GCC选项.NDEBUG
是被定义为根据C标准强制关闭断言的宏.
我对g ++和make的知识很少,但是,通过下面链接的页面,我认为论证需要大写才能工作.
至于-dndebug
,因为宏区分大小写,我认为它不会有任何影响,即它应该被忽略,除非你有一些引用它的代码.
它很容易测试:
$ 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
预期的.