你的小C/C++項目已經達到了一個點,它不再實際擁有所有的代碼在一個文件中。你想拆分出幾個組件。所以你製作一個src/
目錄,然後......你必須寫一個真正的Makefile。超過hello: hello.o
的東西。呃哦......是[email protected]
還是$<
或$^
?廢話。你不記得(我從來沒有)。規範「簡單的項目」的makefile
你有一個「一刀切」的簡單的Makefile可以處理簡單的源代碼樹?如果是這樣,那麼它是什麼?爲什麼?我正在尋找最小,最簡單的Makefile,它可以很好地編譯一個充滿C文件的目錄,而不必每次添加文件時都要編輯Makefile。這是我到目前爲止有:
CXX = clang++
CXXFLAGS = ...
LDFLAGS = ...
EXENAME = main
SRCS = $(wildcard src/*.cc)
OBJS = $(patsubst src%.cc,build%.o, $(SRCS))
all: $(EXENAME)
build/%.o: src/%.cc
@mkdir -p $(dir [email protected])
$(CXX) -c -o [email protected] $^ $(CXXFLAGS)
$(EXENAME): $(OBJS)
$(CXX) -o [email protected] $^ $(LDFLAGS)
clean:
rm -rf $(EXENAME) build/
這個Makefile構建所有在src/
目錄到在build/
目錄.o
文件.cc
文件,然後鏈接起來到父目錄。
你會做什麼不同?
我會使用cmake。一旦你有幾個頭文件,直接維護一個Makefile就不會擴展。 Autotools體積龐大,需要太多步驟。 Cmake是一款真正的萬能工具。 –
我肯定會使用cmake超過10個文件;對於那些比這更小的東西,它似乎有點沉重。 – nornagon
這真是令人驚訝的不重要,它確實只是完成必要的工作量。在第一次調用之後,即使你改變了CMake文件,你也只需要繼續調用'make'就可以了 - 就像它計算出依賴的方式一樣: - (但是,它確實創建了一個目錄結構,你可能會發現太多太小的情況。) –