c++ - 我怎样才能使这个 Makefile 更通用?

标签 c++ makefile

我通过完成许多小程序来复习 C++,每个小程序都包含在一个 cpp 文件中。我还想更多地了解 Makefile,并决定编写一个 Makefile 来编译我所有的小程序并为每个程序生成一个可执行文件。使用我当前的 Makefile,我必须:

  1. 将名称附加到“BINARIES”的末尾

  2. 复制重复的目标并将目标名称替换为二进制名称

我怎样才能编辑这个 Makefile 使其更加通用,这样我就可以简单地将我的新程序的名称附加到“BINARIES”的末尾,而不必继续复制和粘贴重复的目标?

    BIN=./bin/
    SOURCE=./src/
    CXX=g++
    CXXFLAGS=-g -c -Wall
    BINARIES=sums-in-loop sum-in-loop sum-of-two
    RM=rm -f

    all: sums-in-loop sum-in-loop sum-of-two

    sums-in-loop:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 

    sum-in-loop:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 

    sum-of-two:
        $(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@ 

    clean:
        $(RM) $(BIN)*

最佳答案

通常的方法是使用模式规则:

BIN=bin
SOURCE=src
CXX=g++
CXXFLAGS=-g -Wall
BINARIES=sums-in-loop sum-in-loop sum-of-two
RM=rm -f

all: $(addprefix $(BIN)/,$(BINARIES))

$(BIN)/%: $(SOURCE)/%.cpp
    $(CXX) $(CXXFLAGS) $< -o $@ 

clean:
    $(RM) $(BIN)/*

关于c++ - 我怎样才能使这个 Makefile 更通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278593/

相关文章:

c++ - #define DATA 10 和 # if Defined DATA 之间的区别

c++ - 1000.f 中的 .f 是什么意思? C++

ubuntu - 使用 Makefile 调试 CLion [UNIX]

makefile - Makefile 中的 $@ 和 $< 是什么?

c - 如何在 Autotools 中打包可执行文件及其依赖的库

java - Java 使用哪个版本的 Make?

c++ - 如何使用 itk 对 tif 文件图像进行插值?

c++ - 印度狐猴 : issue with the make file

c++ - Vim 在 C++ 类中的格式化/自动缩进似乎不正确。这是正常的吗?

c++ - 错误为 : unrecognized option '-mcpu=arm1176jzf-s'