是否可以在編譯過程中使用通配符函數在Makefile中排除源文件?使用Makefile編譯時排除源文件
像有幾個源文件,
src/foo.cpp
src/bar.cpp
src/...
然後在我的makefile我有,
SRC_FILES = $(wildcard src/*.cpp)
但我想排除bar.cpp。這可能嗎?
是否可以在編譯過程中使用通配符函數在Makefile中排除源文件?使用Makefile編譯時排除源文件
像有幾個源文件,
src/foo.cpp
src/bar.cpp
src/...
然後在我的makefile我有,
SRC_FILES = $(wildcard src/*.cpp)
但我想排除bar.cpp。這可能嗎?
可以使用的Makefile SUBST功能:
EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES})
使用爲它找到:)
SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp")
如果您使用GNU製作,您可以使用filter-out
:
SRC_FILES := $(wildcard src/*.cpp)
SRC_FILES := $(filter-out src/bar.cpp, $(SRC_FILES))
或作爲一條線:
SRC_FILES = $(filter-out src/bar.cpp, $(wildcard src/*.cpp))
新的'Makefile's?因此,在閱讀完這個優秀的答案之後,請查看'='和':='(以上都使用過)之間的區別,並找出爲什麼您通常會盡可能使用':='! – 2014-08-01 14:07:30
當變量的定義需要解析其他變量時,使用':=':[「這些定義可以包含變量引用,它將在定義完成之前展開」](https://www.gnu.org/software/make/ manual/html_node/Setting.html#index-_003a_003d-1) – mems 2014-11-05 21:31:44
作爲@TomaszGandor評論的附錄:參見[變量的兩個風格](https://www.gnu.org/software/make/manual/ html_node/Flavors.html#Flavors)在GNU make文檔中。 – jhin 2015-09-14 10:12:39
Unix glob模式src/[!b] *。cpp排除以b開頭的所有src文件。
但是,只有bar.cpp是以b開頭的唯一src文件,或者如果您願意將其重命名爲以獨特字符開頭,那纔會起作用。
你的意思是$(shell找到src/...)? – 2012-04-23 07:45:24
是的,忘記了:) – K1773R 2012-04-23 07:50:43