【发布时间】:2018-05-19 05:12:25
【问题描述】:
到目前为止,我有一个如下所示的 Makefile:
# Program list:
# a.cpp, a.h,
# b.cpp, b.h,
# c.cpp. c.h,
# d.cpp, d.h,
# commonA.cpp, commonA.h,
# commonB.cpp, commonB.h,
# mainA.cpp, mainB.cpp,
# mainC.cpp, mainD.cpp.
CXX=g++
CXXFLAGS = -std=c++11 -g -Wall
prog1: mainA.cpp a.cpp
$(CXX) $(CXXFLAGS) programOne mainA.cpp a.cpp
prog2: mainB.cpp b.cpp
$(CXX) $(CXXFLAGS) programTwo mainB.cpp b.cpp
prog3: mainC.cpp c.cpp commonA.cpp
$(CXX) $(CXXFLAGS) programThree mainC.cpp c.cpp commonA.cpp
prog4: mainD.cpp d.cpp commonA.cpp commonB.cpp
$(CXX) $(CXXFLAGS) programFour mainD.cpp d.cpp commonA.cpp commonB.cpp
# etc...
我已经查看了 make GNU 文档,这相当令人生畏——我试图从中尽可能多地理解。我想知道以我的示例为例,我如何才能将其缩短得比现在还要短?是否有一个很好的规则可以使用上面程序列表中每个文件的所有目标文件,然后我包含每个部分的特定对象?非常感谢任何帮助!
【问题讨论】:
-
您的目标通常应该与它们产生的输出同名。所以
prog1应该是programOne。 -
您的问题相当广泛,但研究这个答案可能很有用:stackoverflow.com/a/28860795/3807729
-
请注意,您的所有规则都会生成相同的输出 --
a.out-- 因为您从未在命令中的任何位置指定输出文件的名称。您需要提供更多关于您希望 makefile 实现什么的详细信息。