[英]Make a simple makefile generic
我有一個簡單的makefile,可以幫助我編譯一些示例:
ex104: ex104.cpp
$(CPP) ex104.cpp $(INCS) $(LINKFLAGS) $(COMPILEFLAGS) -o ex104
clean:
rm -f *.o $(EXECUTABLE)
現在,這很好。 問題是:我將需要為每個示例顯式編寫一條規則,從而多次復制以下行:
ex104: ex104.cpp
$(CPP) ex104.cpp $(INCS) $(LINKFLAGS) $(COMPILEFLAGS) -o ex104
有沒有一種通用的方法? 這樣,我最終得到的命令行如下所示,它將從自動構建的ex252
構建出ex252.cpp
:
make ex252
幸運的是,這是一個僅模板的庫,因此我始終只需要從一個cpp文件進行構建,並且不需要跟蹤目標文件。
Make有很多默認規則,如果您使用默認規則代替標記,那么您想要的應該起作用。
如果您的make版本沒有這樣的默認值,則應添加一個(與GNU make default規則相對應,其中插入了一些中間變量,並刪除了一個過時的變量):
.cpp:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
CXX是C ++編譯器
CXXFLAGS是C ++編譯器的標志
CPPFLAGS是預處理器的標志(它們在gnu make中的C和C ++之間是常見的)
LDFLAGS是鏈接的標志
TARGET_ARCH允許指定目標架構
LDLIBS是要鏈接的庫
就像@AProgrammer所說的那樣,請使用內置規則。 我只想對此進行擴展。
您可以通過遞歸grep make的數據庫轉儲找到內置的規則和標志。 make -pq | grep %:
make -pq | grep %:
獲取可以生成可執行文件並生成make -pq | grep '%: %.cpp' -A5
的規則列表。 make -pq | grep '%: %.cpp' -A5
查看它執行的實際命令。
就您而言,整個makefile看起來可能像這樣:
all: ex104
只要默認目標要求ex104
並且ex104.cpp
存在,將選擇%: %.cpp
內置規則。 您可以以此為基礎。 添加更多依賴項和標志。
CXXFLAGS += -Wall -Wextra -Wpedantic -std=c++14
all: ex104
ex104: common_utils.cpp
PS:在make CPP中指的是C預處理程序,而不是C ++。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.