C++ 预处理器变量

6

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

#define SKELETON_JAR "./Util.jar"

你的构建环境是什么?你的操作系统是什么? - David Thornley
3个回答

8
在你的代码中:
#ifndef SKELETON_JAR
  #define SKELETON_JAR "./Util.jar" // default path
#endif

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

当然,您需要确保将CPPFLAGS作为编译规则的一部分传递给编译器,如果您正在使用默认的隐式规则,则是这种情况。

来自GNU Make文档:

编译C程序

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


有用的条件编译代码段,尽管我不会冒险对 OP 的 makefile 特性做出任何假设。重要的部分只是 -D 命令行开关。 - Clifford
2
作为定义默认路径的替代方案,您也可以像这样做: #ifndef SKELETON_JAR #error "SKELETON_JAR未定义" #endif这样,您就可以轻松地捕获任何在Makefile中未定义的情况。 - Glen

6

根据您使用的编译器,在makefile中通常使用编译器的-D标志来实现此操作。例如:

MYFLAGS = -DSKELETON_JAR="foo"

然后稍后:

gcc $(MYFLAGS) $(OTHER_STUFF)


有些人可能只是喜欢给踩赞吧。我可能会简单地描述一下-D<macro>=<value> GCC选项,而不会对OP的Makefile作出任何可能会令人困惑的假设。 - Clifford
1
OP标记了问题的makefile标签。 - Gregory Pakosz
他不仅给它打了标签,还在问题中明确询问了Makefile! - anon

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接