2010-01-13 73 views
3

比方說,我有一個項目,我已經在.build目錄運行cmake:有cmake的變化二進制目錄

project/ 
    .build/ 
    .src 

目前,我必須這樣做是爲了運行構建:

cd .build 
make 

我希望能夠與

make -f ./build/Makefile 

運行從我的項目的根做,也許,但它不能正常工作。我得到這樣

make[1]: CMakeFiles/Makefile2: No such file or directory 
make[1]: *** No rule to make target `CMakeFiles/Makefile2'. Stop. 
make: *** [all] Error 2 

這個錯誤是因爲CMake的生成Makefile文件假設其工作目錄是一樣的地方居住(.build)。

是否有可能讓CMake生成一個makefile,使makefile將工作目錄更改爲它所在的位置?

回答

0

另一種方法是在你想運行從使目錄下創建另一個Makefile文件,與內容是這樣的:

all: 
     cd ./build; make $(MFLAGS) 

然後,你可以只在頂級目錄輸入「make」 。

我不認爲有辦法讓cmake生成可以從任何位置運行的Makefile。這通常不是通常使用的。

但你也許能哄cmake的進入創造了你的項目根目錄下的額外的輔助生成文件,與像的CMakeLists.txt以下一些cmake的:

configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY) 

(如果需要的話,替換「$ {} CMAKE_SOURCE_DIR」與解析爲您的項目根目錄下的表達)

而你需要創建文件ProjectRootMakefile.in在源樹,像內容:

all: 
     cd @[email protected]; make $(MFLAGS) 

它將用作項目根Makefile的模板。 (確保在「cd」之前使用製表符,而不是空格)

我還沒有測試過這些建議,但這裏應該有足夠的概念給你。

+0

這是一個有趣的想法......關於如何讓CMake將所有目標放入頂層makefile的任何想法? – paleozogt

+0

您可能會考慮使用舊式的源代碼構建過程。這些日子已被棄用,但曾經是常態。將CMakeLists.txt文件放入項目根目錄中。 「ccmake -i。」,「make」,「做任何事」和「make install」就在那裏。您的來源將與您的二進制文件混合在一起,純粹主義者會很好,但它可能會滿足您的需求。 –

7

你只需要告訴make你的基目錄在哪裏,不需要改變cmake。

make -C your_build_directory 
+0

此方法很有用,因爲它允許從任何目錄進行製作,並且可以正常訪問所有目標 - 包括製表符完成。 –