c - 尝试编译目标。这是C代码。已放置#ifdef MYDEBUG。如何在编译期间将其作为设置传递?

标签 c unix makefile gnu-make

我正在尝试使用 make 编译目标。在我的代码中,我将前置条件设置为:

#ifdef MYDEBUG
 (code to execute)
#endif

现在我的印象是,如果我做一个

make -DMYDEBUG target

代码应该被编译。但这似乎不起作用。我不知道出了什么问题以及出在哪里。 makefile 有层次结构,我试图查看它们,但坦率地说,我不知道我在寻找什么。上面的方法不应该起作用吗?或者可能在 makefile 中指定了一个选项来禁用如上所述设置 MYDEBUG 变量?或者我做错了什么?仅供引用,我的开发盒是 freebsd。

最佳答案

我不确定 make 的选项 -DMYDEBUG 是否有效或有什么用处。

当您使用#ifdef MYDEBUG时,您需要MYDEBUG作为定义的预处理器。这可以通过多种方式完成。

  • 在代码中定义为#define MYDEBUG
  • 要求编译器通过指定适当的选项来定义它。对于gcc,您可以使用-DMYDEBUG指定它。

  • 如果编写得当,makefile 通常还可以使用定义的环境变量(例如 CFLAGSLIBS 等)来传递给适当的命令。

  • CFLAGS 用于指定任何与编译相关的选项。

关于c - 尝试编译目标。这是C代码。已放置#ifdef MYDEBUG。如何在编译期间将其作为设置传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728126/

相关文章:

c - 对c中的指针进行两次逻辑否定有什么意义?

bash - 退出管道中的 BASH 无限循环

linux - 如何按第三列中的数字对数据进行排序?

c - 如何使用 header 将 C 源文件链接在一起

c - 如何对大小/类型不同的变量执行按位比较

c++ - 什么时候不在头文件中使用包含保护?

c - 这是消息队列应该如何工作的吗?

c++ - 使不更新可执行文件

c++ - GNU 使 : Strange "Multiple targets pattern" - error

c - Makefile 不删除中间文件