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

C++ 在makefile中使用ifeq编译C或CPP文件,c++,makefile,emscripten,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(当我用'.cpp'替换'.c'时也是如此) 有没有一种方法可以实现基

我想将
src/
目录中的所有文件编译到
bc/%.bc

因为我使用了
std=c++17
标志,而这些标志不能与
.c
文件一起使用,所以我尝试了以下方法:

bc/%.bc: src/%.*
    ifeq '$(suffix $^)' '.c'
        emcc $^ -o $@
    else
        em++ $^ -o $@ -std=c++17
    endif
但是它不起作用,条件
ifeq
总是false(当我用
'.cpp'
替换
'.c'
时也是如此)


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

有多种方法。最好是将规则分为两个规则,一个用于
.c
,另一个用于
.cpp

bc/%.bc: src/%.c
    emcc $< -o $@

bc/%.bc: src/%.cpp
    em++ $^ -o $@ -std=c++17
以及构建所有内容的默认规则:

$(TARGETS):

做这件事的方法不止一种。最好是将规则分为两个规则,一个用于
.c
,另一个用于
.cpp

bc/%.bc: src/%.c
    emcc $< -o $@

bc/%.bc: src/%.cpp
    em++ $^ -o $@ -std=c++17
以及构建所有内容的默认规则:

$(TARGETS):