我遇到makefile问题并使用assert进行编译。对于赋值,我应该使用make -B FLAG = -DNDEBUG来编译以关闭调试模式并使-B打开它。我不确定-B的作用是什么,我不明白它的文档“-B,-always-make无条件地制作所有目标”(来自手册页)。如果有人可以帮助那就太棒了!
答案 0 :(得分:0)
感谢@MadScientist在我的回答中指出错误 (-D是编译器选项,不是make指令的选项)
[纠正后的答案]
使FLAG = -DNDEBUG
或
make -B FLAG = -DNDEBUG
在这种情况下,您必须拥有自己的自定义makefile。
使用make指令定义的标志可以在makefile中用来添加编译器选项
例如
Makefile - >
所有:
gcc $ FLAG -o test -c test.c
[纠正前的答案]
make --->如果是第一次,那么是新建,如果是连续调用,那么只对已修改的源文件或更新库的链接进行增量构建
make -B --->总是新建,而不是增量构建
make -B -DNDEBUG --->关闭调试日志(根据你的代码使用NDEBUG宏来控制调试代码),总是做新的构建
使用NDEBUG宏控制函数调用序列调试的示例代码:
void test_func()
{
#ifndef NDEBUG
printf("%s::%d::++Entered\n, __func__, __LINE__);
#endif /* NDEBUG */
/* Your code goes here */
...
#ifndef NDEBUG
printf("%s::%d::--Exiting\n, __func__, __LINE__);
#endif /* NDEBUG */
}
当make -B(或make)用于编译程序时,程序将在执行时打印调试日志。
当make -B -DNDEBUG(或make -DNDEBUG)用于编译程序时,由于此次定义了NDEBUG符号,因此不会打印调试日志。