簡體   English   中英

如何使用Makefile變量作為要包含在g ++命令中的文件?

[英]How to use Makefile variables as files to include in g++ command?

這是我的問題:我有一個makefile文件,其中包含用於編譯項目中所有內容的信息,以使我的生活更輕松,但是最近這讓我有些頭疼。

它可以編譯多個文件,例如:

objects/io.o: sources/io.cpp
    @g++ -c $< -o $@ -std=c++11
objects/map.o: sources/map.cpp
    @g++ -c $< -o $@ -std=c++11

在makefile的頂部,我有這樣聲明的變量:

IO="objects/io.o"
MAP="objects/map.o"
[... other object files ...]
ALL="$(IO) $(MAP) [...]"

當我要編譯主文件時,請使用以下命令:

main.exe: tests/main.cpp
    @g++ $< $(ALL) -o $@ -std=c++11

當我手動編譯此問題時(在命令的一行中輸入所有內容,而不是制作make main.exe ),它make main.exe編譯。

但是,當我對項目使用make命令時,會彈出以下錯誤:

clang: error: no such file or directory: 'objects/io.o objects/map.o [...]'
make: *** [main.exe] Error 1

我可以不這樣使用變量嗎? 我非常困惑。 我知道這些文件都是經過編譯的,似乎make實用程序無法理解文件路徑。

我認為問題是您引用了變量。 嘗試取消引用它們,它們將不會擴展單個參數:

ALL = $(obj1) $(obj2) ...

另外,對於那些使用相同編譯過程的對象,我通常定義一條規則:

obj/%.o: %.cc
    $(GCC) -o $@ -c $< $(FLAGS)

顯然,這將需要定義額外的變量GCCFLAGS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM