2016-04-30 22 views
0

目前,我有一個其中有下面的代碼的主文件夾中的CMakeLists.txt文件緩存的變量時,不需要輸出生成文件:如何抑制使用與CMake的一個CMakeList.txt文件

cmake_minimum_required(VERSION 3.5) 

SET(CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE) 
SET(CMAKE_TOOLCHAIN_FILE ${PROJECT_SOURCE_DIR}/ToolChain.cmake) 

project(Blinky) 

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) 

... 

當我運行它時,它首先將Visual Studio輸出到源目錄。當我第二次運行它時,它會輸出相應的minGW makefile,但仍然是源目錄,而不是bin文件夾。有沒有什麼方法可以將它配置爲直接爲MinGW Makefile構建,並將其構建到正確的輸出文件夾?

我在從源目錄文件夾下面的代碼行一個命令行提示符下運行腳本:

cmake CMakeLists.txt 
+1

爲什麼使用這種奇怪的方式?爲什麼不像往常一樣'mkdir bin'' cd bin'' cmake ..'? – fghj

+0

說實話@ user1034749發佈了正確的方式來處理對象創建輸出目錄。這樣你可以保持中間文件的源目錄清潔。 – Joel

+0

可能重複[如何更改CMake輸出解決方案和項目文件的目錄?](http://stackoverflow.com/questions/5399659/how-do-i-change-the-directory-to-which- cmake-outputs-solution-and-project-files) – usr1234567

回答

0

你不應該從你的源代碼目錄運行cmake。這絕對是一個糟糕的做法

確實,這會將您的makefile(或您的Visual Studio文件)與您的源文件混合在一起,甚至可能損壞您的源代碼目錄(取決於您在CMakeLists.txt中指定的內容)。

你所要做的

首先,你需要創建一個單獨的編譯目錄在那裏你會推出cmake的。

然後,如果你想與MinGW的makefile文件生成,生成目錄啓動以下命令行:

cmake path_to_source_directory -G "MinGW Makefiles"

你CMakeList.txt進一步意見

由於命令上面的行指定了生成器(選項-G「...」),SET(CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE)沒用。看看this SO post and its answers。它解釋了爲什麼您在第一次啓動CMake和MinGW makefiles時生成Visual Studio文件。

然後,正如@克雷格斯科特所說,你應該用SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)代替SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)。否則,您的可執行文件將被放入您的源代碼目錄中。

+0

關於您在編輯時添加的內容:是的,那是我從中獲得解決方案的地方。我只是想知道是否有任何方法來抑制第一次運行時產生的不需要的輸出(VS文件)。另外值得一提的是,我正在從我的計算機到嵌入式arm進行交叉編譯,並且我可以將更多配置選項放入單個配置文件/腳本中。儘管如此,謝謝你的答覆。 – user2544187

+0

我不知道用CMake的任何自動方式來刪除源目錄中的不需要的輸出。這是不建立信息來源的另一個原因。如果你想在生成的版本上選擇配置選項,你可以使用ccmake或CMake GUI。 – cromod

+0

工具鏈文件是你應該把你的交叉編譯選項,而不是你的CMakeLists.txt文件。這是他們的重點。然後,您可以爲不同的目標平臺提供不同的工具鏈文件,這些工具鏈文件具有自己的一套自定義編譯器標誌,軟件包搜索路徑等。由於我的答案和@ crmod的答案都指出,如果您在命令行上指定生成器而不是嘗試執行它在CMakeLists.txt文件中,它會做你想做的,即不創建任何Visual Studio輸出,只有MinGW。如果您不想輸入所有類型的文字,請使用腳本。 –

0

從您要用作構建目錄的目錄運行cmake,而不是從源代碼樹內運行。這會給你一個源代碼構建(參見here瞭解這方面的一些細節)。

您必須在命令行上設置要使用的CMake生成器和工具鏈文件,而不是在CMakeLists.txt文件中執行。此外,您不包括您的CMake命令行中的CMakeLists.txt文件的名稱,而是它的目錄,例如:

cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=/path/to/source/dir/ToolChain.cmake /path/to/source/dir 

最後,指定您的可執行文件應該去,確保您使用correct CMake variables並確保將它們放置在構建目錄中的某個位置,而不是源代碼樹:

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)