2013-04-06 32 views
1

我開始使用CMake的建立我的C++源文件,我看到一個奇怪的comportament當我建立inicially:CMake的depend.make文件空

'cmake的../' 將GERATE目錄結構

「使」將建設

任何連續make命令將建立任何東西,因爲預期

'cmake的../' 將明顯什麼都不做

'使' 將重新建立所有

任何連續make命令將白手起家,如預期

還有就是我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.6) 

set(CMAKE_CXX_COMPILER "g++") 
set(CMAKE_CXX_FLAGS "-Wall -pipe") 

set(var_target CommonBase) 
set(var_path_source base) 
project(Prj_${var_target}) 

file(GLOB_RECURSE var_sources ${var_path_source}/*.cpp) 
add_library(${var_target} SHARED ${var_sources}) 

install(TARGETS ${var_target} DESTINATION ${PROJECT_SOURCE_DIR}/install) 

迎向美好的,在第一次 'cmake的../' 命令文件「CMakeFiles /CommonBase.dir/depend.make'爲空,並且連續的make命令將插入文件依賴項列表

我的CMakelists.txt有問題嗎?

謝謝

回答

1

這裏有幾個問題。

您的問題的實際原因是在命令命令之前有set(CMAKE_CXX_FLAGS ...)行。

project命令在首次運行時會執行相當多的工作,並且實際清除此變量爲副作用。因此,在您第一次運行CMake時,編譯器標誌是空的,並且此後始終包含您所需的內容。 (這只是第二次運行CMake導致make重新編譯所有,而不是隨後的CMake運行)。

嘗試包裝你的電話projectmessage s到看到效果:

message("CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}") 
project(Prj_${var_target}) 
message("CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}") 

刪除您CMakeCache.txt文件(在構建根),然後只需運行cmake ..反覆。

要解決此問題,請將您的set(CMAKE_CXX_FLAGS ...)移動到project命令之後。

第二個問題是,不建議在CMakeLists.txt中設置CMAKE_CXX_COMPILER。看看下面的註釋「Setting default compiler in CMake」,還有鏈接到CMake的常見問題條目How do I use a different compiler?

+0

真的! 用我原來的配置,調用「cmake ..」兩次解決問題,導致「make」和「cmake」的其他後續組合按預期方式運行! 嘗試你的建議,第一個呼叫輸出 CMAKE_CXX_FLAGS - -Wall -pipe ... CMAKE_CXX_FLAGS - ... 的第二呼叫輸出 CMAKE_CXX_FLAGS - -Wall -pipe CMAKE_CXX_FLAGS - -Wall -pipe ... 我將刪除冗餘集(CMAKE_CXX_COMPILER 「G ++」) 謝謝! – campisano 2013-04-07 05:36:12