2009-12-11 138 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中定義標誌。