制作一个简单的makefile泛型

Mic*_*ael 1 c++ makefile

我有一个简单的makefile来帮助我编译一些例子:

   ex104: ex104.cpp
        $(CPP) ex104.cpp $(INCS) $(LINKFLAGS) $(COMPILEFLAGS) -o ex104  

   clean:   
        rm -f *.o $(EXECUTABLE)
Run Code Online (Sandbox Code Playgroud)

现在,这很好.问题是:我需要为每个示例明确编写规则,因此复制以下行很多次:

   ex104: ex104.cpp
        $(CPP) ex104.cpp $(INCS) $(LINKFLAGS) $(COMPILEFLAGS) -o ex104
Run Code Online (Sandbox Code Playgroud)

有没有办法将它泛化一点?所以,我最终会象下面这样将建立一个命令行ex252ex252.cpp自动生成:

make ex252
Run Code Online (Sandbox Code Playgroud)

幸运的是,它是一个仅模板库,因此我总是只需要从一个cpp文件构建,而且我不需要跟踪目标文件.

APr*_*mer 5

Make有一堆默认规则,你想要的东西应该有用,如果不是你的变量,你使用默认的标志来给出.

如果您的make版本没有这样的默认值,那么应该添加一个(它对应于GNU make default rule,其中一些中间变量是内联的,而过时的一个已被删除):

.cpp:
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
Run Code Online (Sandbox Code Playgroud)

CXX是C++编译器

CXXFLAGS是C++编译器的标志

CPPFLAGS是预处理器的标志(它们在gnu make中的C和C++之间很常见)

LDFLAGS是链接的标志

TARGET_ARCH允许指定目标体系结构

LDLIBS是要链接的库