雖然有是做一個相當大的學習曲線,生成文件是首選的解決方案。在SO上,我也注意到了CMake的大量使用。
爲你的Makefile更多的想法:
以下兩條規則處理90%我簡單的單元測試的可執行文件:
R01處理既.cc的文件和.hh
R02處理文件只有.cc
# pattern rule R01
# when any ARCHIVE changes, trigger a rebuild
% : %.cc %.hh $(LIB_ARCHIVEs)
@echo
@echo R01: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
# pattern rule R02
# when any ARCHIVE changes, trigger a rebuild
% : %.cc $(LIB_ARCHIVEs)
@echo
@echo R02: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
偶爾,我會添加特定的LIB名和目錄...直接向LIB_DIRs和LIB_NMs定義在Makefile中。例如,在這裏我添加-lrt和-pthread:
LIB_NMs += -lbag_i686 -lposix_i686 -lrt -pthread
bag_i686和posix_i686是圖書館我建...簡單的C++類包裝圍繞Linux和POSIX功能。我的大部分單元測試都不會使用很多posix的東西,但是我不會感到悲傷。
使用C++ std :: thread,我很少使用-pthread。但是,我偶爾會使用posix信號量。
我的編譯的命令行訪問(在Ubuntu上的Emacs)提供了一個歷史,所以偶爾的改變或添加命令行僅僅是一個「麻煩」一次。從此,新的命令在歷史中可用。
我啓動emacs的配置有「嵌入式」預先定義的編譯命令:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64' -j 2 -k
此命令顯示了第一時間我從emacs的內啓動編譯器。 Emacs提供它就好像該命令已經在'編譯命令歷史'中。
我手動縮短這一點,如果我不重建所有,平時我只建立一個單一的UT:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64'
因此,舉例來說,當我準備編譯dumy431.cc,我調用:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='g++ -m64' dumy431
我啓動的下一個版本(從emacs編譯中啓動)以上一個命令開始,向上/向下箭頭通過任何其他版本的命令。
利用這種形式的命令,我可以平凡從克++改變由在適當的位置插入「族」到鐺++:
USER_FLAGS='-O0 ' ; export USER_FLAGS ; time make CC='clang++ -m64'
鐺++通常提供額外的診斷使g ++不報告。要回滾到g ++,我可以在編譯器命令面板中向上箭頭(或編輯命令)。
這是一個小例子,其中我的單元測試代碼有多個src文件。通常情況下,非主文件(如eng_format *)是我計劃捕捉到我的圖書館之一以備將來使用代碼:
FMssb.o : FMssb.cc FMssb.hh
@echo
@echo R_FMssb.o: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) -c $< -o [email protected]
FMssb_ut : FMssb_ut.cc eng_format.o FMssb.o $(LIB_ARCHIVEs)
@echo
@echo R_FMssb_ut: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) $< -o [email protected] eng_format.o FMssb.o $(LIB_DIRs) $(LIB_NMs)
eng_format.o : eng_format.cpp eng_format.hpp $(LIB_ARCHIVEs)
@echo
@echo R_EF: $<
rm -f [email protected]
$(CC) $(CC_FLAGS) -c $< -o [email protected] $(LIB_DIRs) $(LIB_NMs)
是否G ++調用鐺鏈接? –
是的上述工作,但我認爲最好的辦法是創建make文件 – sger
既然你已經知道,一個Makefile是要走的路,你有什麼問題? –