【问题标题】:C++ preprocessor variableC++ 预处理器变量
【发布时间】:2009-12-11 11:31:14
【问题描述】:

我在我的 C++ 代码的一个标头中使用了SKELETON_JAR 变量。但是,我想让用户在编译时轻松定义 jar 的位置。我认为最简单的方法是将这个定义放在makefile中是这样的吗?

#define SKELETON_JAR "./Util.jar"

【问题讨论】:

  • 你的构建环境是什么?你的操作系统?

标签: c++ makefile c-preprocessor


【解决方案1】:

在您的代码中:

#ifndef SKELETON_JAR
  #define SKELETON_JAR "./Util.jar" // default path
#endif

然后在makefile中使用CPPFLAGS:=-DSKELETON_JAR="./Util.jar"

当然,您必须确保 CPPFLAGS 作为编译规则的一部分传递给编译器,如果您使用默认的隐式规则,情况就是如此。

From GNU Make documentation:

编译 C 程序

n.o 由 n.c 自动生成,命令形式为 `$(CC) -c $(CPPFLAGS) $(CFLAGS)'

【讨论】:

  • 有用的条件编译位,尽管我不会冒险对 OP 的 makefile 的性质做出任何假设。重要的部分只是 -D 命令行开关。
  • 作为定义默认路径的替代方法,您还可以执行以下操作:#ifndef SKELETON_JAR #error "SKELETON_JAR has not been defined" #endif 这样您就可以轻松捕获任何情况尚未在 Makefile 中定义
【解决方案2】:

根据您的编译器,执行此操作的正常方法是在 makefile 中使用编译器的 -D 标志。例如:

MYFLAGS = -DSKELETON_JAR="foo"

然后:

gcc $(MYFLAGS) $(OTHER_STUFF)

【讨论】:

  • 我猜有些人只是喜欢投反对票。我可能会简单地描述 -D= GCC 选项,而不是对 OP 的 makefile 做出任何可能令人困惑的假设。
  • 虽然 OP 用 makefile 标记了问题
  • 他不仅标记了它,还在问题中明确询问了makefile!
【解决方案3】:

使用相同的编译标志并在 Makefile 中定义标志。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多