在makefile中使用ifeq编译C或CPP文件

时间:2018-08-11 13:00:55

标签: c++ makefile emscripten

我想将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'时相同)。

有没有一种方法可以基于文件后缀实现单独的编译?

1 个答案:

答案 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):