2013-04-06 64 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