我想将src/
目录中的所有文件编译到bc/%.bc
。
因为我使用了std=c++17
文件不能使用的.c
标志,所以我尝试了这个:
bc/%.bc: src/%.*
ifeq '$(suffix $^)' '.c'
emcc $^ -o $@
else
em++ $^ -o $@ -std=c++17
endif
但是它不起作用,条件ifeq
始终为false(与将'.c'
替换为'.cpp'
时相同)。
有没有一种方法可以基于文件后缀实现单独的编译?
答案 0 :(得分:2)
有多种方法可以做到这一点。最好的办法可能是将规则分为两个规则,一个用于.c
,另一个用于.cpp
:
bc/%.bc: src/%.c
emcc $< -o $@
bc/%.bc: src/%.cpp
em++ $^ -o $@ -std=c++17
然后,您需要一种方法来构造所需文件的列表。 (无论如何,您都需要这样做,因为src/%.*
不能按照您的想法工作。)
SRC_FILES := $(wildcard src/%.*)
TARTGETS := $(patsubst src/%, bc/%.bc, $(basename $(SRC_FILES)))
以及构建所有内容的默认规则:
$(TARGETS):