2011-11-08 79 views
3

如何告訴cmake應該在哪裏輸出其構建數據?如何告訴cmake在哪裏輸出其構建數據?

比方說,我有一個名爲源代碼目錄的src /, 然後因爲cmake的輸出了很多文件,我想他把所有的在 一個名爲構建/目錄。 但是我想讓他把生成的Makefile放在項目根目錄 中,所以我不必進入構建目錄來構建應用程序。

這可能與cmake?

我設法讓CMake的出來把,如果我開心的CMake在build目錄是這樣的:

cd build/ 
cmake ../src/ 
make 
./hello 

但它會很高興留在項目的根,然後鍵入像這樣

cmake 
make 
./hello 

我想我需要把一個CMakeList.txt放在項目的根目錄下,用一些魔法命令告訴他他可以放置目標文件的位置以及他可以在哪裏找到源代碼。

感謝


更新: 由於我的問題是有點含糊。

我已運行cmake的命令後,這就是我想我的樹,看起來像:

src/CMakeLists.txt 
src/hello.c 
src/hello.h 

build/CMakeCache.txt 
build/CMakeFiles/ 
build/cmake_install.cmake 

CMakeLists.txt 
Makefile 

所以,問題是應該如何的CMakeLists.txt看起來像在此設置。

  • 的CMakeLists.txt
  • 的src /的CMakeLists.txt

但也許那是不可能的?

+0

你有這樣的運氣嗎?我想要完全一樣的東西。 – meffordm

+0

@meffordm不,我放棄了這個想法(和cmake)。 – Johan

+0

那麼,你最終做了什麼?也許你的解決方案(即使沒有cmake)可能對我的項目有所幫助。 – meffordm

回答

0

,但我想他把所產生的Makefile在項目的根,所以我沒有去到構建
目錄構建應用程序。

CMake的不適合的是,我知道, 但你可以留在項目的根和類型:
化妝-C建設
./hello 與自定義生成規則或set_target_properties, 你可以強制cmake的投入導致可執行 源目錄,也可以使用 ./build/hello

鍵入「cd建設& & cmake的..」你只需要一次, 船尾呃,如果 改變了,它會自動啓動cmake。

0

cmake希望你有一個新的生成目錄。

+0

沒問題,我的想法是給cmake那個由他自己扮演的角色。所以這個dir叫做build /是空的,那可以工作嗎? – Johan

+0

不,你應該在build目錄下運行'make'(在你運行第一個例子中運行'cmake'之後)。 –

+0

所以或多或少cmake不打算這樣工作? – Johan

0

好吧,我得到你想要的。我想,你可以用CMakeLists.txt中的一些機器來實現這一點。當然,如果你不是項目開發者,這不是選擇。

在根CMakeLists.txt中,您可以添加文件(WRITE ...)命令,該命令會將Makefile寫入$ {CMAKE_SOURCE_DIR}。此生成的文件將包含這些命令爲每個目標:

<target>: 
    cd ${CMAKE_BUILD_DIR} && ${CMAKE_MAKE_PROGRAM} <target> 

所以,現在你可以運行從源代碼目錄make,它會建立build目錄項目。

+0

但是等等,如果我鍵入cmake。 && make然後cmake文件(CMakeCache.txt,CMakeFiles /,cmake_install.cmake和CMakeList.txt)不會在構建目錄中結束,它們將在項目根目錄中創建? – Johan

+1

對,我以爲你正在問這個問題。 – arrowd

+1

也許我應該澄清這個問題。 – Johan

-2

在你的src目錄只需使用

cmake . 
make 

。 unix系統上的(。)點標識當前目錄。請記住這樣做實際上是不推薦的,因爲src目錄中會有很多構建文件,您必須事後或在發佈時進行清理。

+0

這甚至沒有接近問題所在,我想要進入項目根目錄並運行所有命令。不在任何的subdirs。但我不認爲cmake對此有任何支持。 – Johan

相關問題