【问题标题】:How can I define #define in my Make files如何在我的 Make 文件中定义#define
【发布时间】:2011-01-09 08:43:38
【问题描述】:

在我的 c/c++ 文件中,有多个#define。举个例子:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more code */

你能告诉我如何修改我的 Makefile.in 以便在编译期间在 ALL 文件中拥有那些#define 吗?

谢谢。

【问题讨论】:

  • 考虑修改 configure.ac 或 Makefile.am。 Makefile.in 不适合人类使用。
  • @unknown:configure.ac 需要在 Makefile.in 中的某处设置值。 Makefile.in 部分用于人类消费 - 除非您使用 Automake 或其他工具来生成 Makefile.in。

标签: c makefile autotools


【解决方案1】:
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

你可以通过CPPFLAGS

CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

或创建新变量

CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

并将其传递给CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

这些最终将传递给gcc/g++ -D...

$(CC) $(CPPFLAGS)

【讨论】:

  • afaik 预处理器标志实际上应该转到CPPFLAGS
  • @s.mark - dang,你把钉子钉在了那里......这就是我想要弄清楚的......我的答案很接近但还不够接近:)
  • cpp 指 C 预处理器,CXX 前缀用于 C++
  • 这样做完全错过了使用自动工具的意义。配置脚本应该决定是否设置这些变量,而不是用户。
【解决方案2】:

将下面的行添加到您的 makefile 中:

DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG ... ...进一步在你的makefile中它说...的那一行。 ... $(cc) ($(addprefix -D, $(DEFINES))) ..... ... ...

这是作为示例,您只需将另一个定义添加到DEFINES 变量中,该变量在$(cc) -D$(DEFINES) 所示的行中被引用,其中make 将自动扩展变量并编译那些#ifdef d.

感谢 R Samuel Klatchko 指出一个小错误...这是专门针对 GNU 的 make,您可以使用 addprefix 正确地做到这一点( $(addprefix -D, $(DEFINES))).

【讨论】:

  • 这只会将 -D 添加到第一个定义中(因此它将产生-DLIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG)。如果你有 GNU make,你可以使用 addprefix 正确地做到这一点 ($(addprefix -D, $(DEFINES)))。
  • @R Samuel Klatchko:编辑答案以反映您的评论!为抬头干杯! :)
  • 通常,$(CC) 或 ${CC} 的 CC 是大写的,而不是小写的。
【解决方案3】:

不要修改你的 Makefile.in。 (并考虑使用 Automake 并将您的 Makefile.in 转换为更简单的 Makefile.am)。这些#defines 的全部意义在于让配置脚本在config.h 中定义它们,并且您的源文件应该#include 。如果您正在维护该软件包,则需要在 configure.ac 中编写测试以确定所使用的系统是否安装了 libvncserver 并支持 jpeg 和 zlib。如果您修改 Makefile.in 以始终定义它们,那么您假设您的代码仅构建在具有这些功能的机器上。如果你做出这样的假设,你仍然应该向 configure.ac 添加检查以确认它,如果不满足依赖关系,则配置脚本会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2014-05-15
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多