2009-12-11 143 views
6

我在一个头文件中使用我的C++代码中的SKELETON_JAR变量。但是,我想让用户在编译时容易定义jar的位置。我认为最简单的方法是将这个定义放在makefile中是这样吗?C++预处理器变量

#define SKELETON_JAR "./Util.jar" 
+0

什么是您的构建环境?你的OS? – 2009-12-11 17:53:12

回答

8

在您的代码:

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

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

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

From GNU Make documentation

编译C程序

没有自动地从NC与表单'$(CC)$ -c(CPPFLAGS)$(CFLAGS)”

的指令作出
+0

条件编译的有用位,尽管我不会冒任何有关OP的makefile性质的假设。重要的部分只是-D命令行开关。 – Clifford 2009-12-11 11:54:35

+0

感谢球员,两个答案都精彩 – 2009-12-11 12:13:56

+2

作为替代定义了默认的路径,你也可以做这样的事情: 的#ifndef SKELETON_JAR #ERROR“SKELETON_JAR尚未定义” #ENDIF 这样,你会很容易捕捉任何未在Makefile中定义的情况 – Glen 2009-12-11 12:24:31

6

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

MYFLAGS = -DSKELETON_JAR = “foo” 的

再后来:

GCC $(MYFLAGS)$(OTHER_STUFF)

+0

对于downvoter - 这个答案的哪一点是不正确的? – 2009-12-11 11:39:12

+0

想知道同样的事情 – 2009-12-11 11:43:30

+0

有些人只是喜欢倒推我猜。我可能会简单地描述-D = GCC选项,而不是对OP的makefile做任何可能令人困惑的假设。 – Clifford 2009-12-11 11:52:07

0

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