"-dndebug"(小写)在g ++中做什么吗?

Sco*_*eis 8 c++ makefile g++

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

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

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

leg*_*s2k 16

是的,这应该是大写的-DNDEBUG.

-D是定义宏的GCC选项.NDEBUG是被定义为根据C标准强制关闭断言的宏.

我对g ++和make的知识很少,但是,通过下面链接的页面,我认为论证需要大写才能工作.

至于-dndebug,因为宏区分大小写,我认为它不会有任何影响,即它应该被忽略,除非你有一些引用它的代码.


tro*_*foe 7

它很容易测试:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到该-d选项实际上会导致编译器警告,因此它看起来像是-D预期的.