2009-11-22 15 views
3

假設我有這樣的目錄:(c)作出 - resursive編譯

dir1 
    main.cpp 
    dir2 
     abc.cpp 
    dir3 
     def.cpp 
     dir4 
      ghi.cpp 
      jkl.cpp 

而且讓我們假設main.cpp中包含DIR2/abc.cpp和DIR3/def.cpp,def.cpp包括dir4/ghi.cpp和dir4/jkl.cpp。

我的問題是,我該如何讓一個 dir1 /中的Makefile/CMakeLists.txt遞歸到每個目錄並編譯* .cpp,然後「連接」它們?

對不起,我希望我解釋我的問題!

謝謝!

+0

你的意思是main.cpp是'#include dir2/abc.cpp'嗎?如果是這樣,那就停止這樣做。 –

+0

不,我正在做#include「dir2/abc.h」,這當然存在,但我不認爲這個問題很重要... – mfolnovich

回答

1

對於makefile文件,DIR1/Makefile中應該:

  • 說main.o上DIR2/abc.o dependends和DIR3/def.o
  • 聲明如何創建DIR2/abc.o和DIR3聲明/def.o

至於cmake的檢測這種依賴「自動」(二進制依靠DIR2/abc.o和DIR3/def.o),所以virually你不需要它的照顧。

+0

我在想沒有指定什麼是dependsicies,所以cmake是我的選擇......但是,在問這個問題之前,我在網上搜索了關於如何做到這一點(因爲我在cmake中是全新的),但是可以找到任何東西......請幫助我嗎? :) – mfolnovich

+0

不幸的是文檔不是很好,沒有足夠的例子。我建議你只是試着做一個小的演示來調查它。根據我的經驗,例如,當我編譯創建可執行文件的目錄時,cmake編譯第一個包含庫的其他目錄,二進制文件應該首先編譯 – dimba

0

遞歸make是一件好事,這是一個開放的論點。請參閱this blog entry以獲取相對最新的專業和相關論文的調查。

+0

我需要這個,因爲我正在創建項目,用戶應該能夠添加它們的代碼,我想避免編輯Makefile ... – mfolnovich

1

其中的CMakeLists.txt文件:

file(GLOB_RECURSE MAIN_SOURCES "dir1/*.cpp") 

add_executable(MainExecutable ${MAIN_SOURCES}) 
# or 
add_library(MyLibrary ${MAIN_SOURCES}) 

我不清楚你所說的 「加盟」 的消息是什麼意思。我在這裏假設你將它們組合成一個庫或一個可執行文件。