【问题标题】:Using ifeq in makefile to compile either C or CPP file在 makefile 中使用 ifeq 编译 C 或 CPP 文件
【发布时间】:2018-08-11 13:00:55
【问题描述】:

我想将src/目录下的所有文件编译成bc/%.bc
因为我使用了不能与.c 文件一起使用的std=c++17 标志,所以我尝试了这个:

bc/%.bc: src/%.*
    ifeq '$(suffix $^)' '.c'
        emcc $^ -o $@
    else
        em++ $^ -o $@ -std=c++17
    endif

但它不起作用,条件ifeq 始终为假(当我将'.c' 替换为'.cpp' 时也是如此)。

有没有办法实现基于文件后缀的单独编译?

【问题讨论】:

    标签: c++ makefile emscripten


    【解决方案1】:

    有不止一种方法可以做到这一点。最好的可能是将规则分成两条规则,一条用于.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):
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 2011-12-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多