是" -dndebug" (小写)用g ++做什么?

时间:2014-06-17 06:27:23

标签: c++ makefile g++

我正在使用多年前其他人创建的400行Linux makefile对多平台C ++项目进行细微更改。

makefile中的两行使用-dndebug(小写)作为g ++的命令行参数。
我认为目的是定义ndebug符号,但是当它是小写时,参数甚至可以做任何事情吗?

我对g ++和make的了解很少但是,通过下面链接的页面,我认为论证需要大写才能工作。
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

2 个答案:

答案 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就是预期的。