CMake depend.make文件为空

时间:2013-04-06 23:02:11

标签: cmake

我开始使用CMake来构建我的c ++源文件,当我建立起来时,我看到一个奇怪的比较:

'cmake ../'将对目录结构进行gerate

'make'将构建所有

任何连续的make命令都不会像预期的那样构建任何内容

'cmake ../'显然什么都不做

'make'WILL REBUILD all

任何连续的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 个答案:

答案 0 :(得分:1)

这里有几个问题。

问题的实际原因是在<{em} set(CMAKE_CXX_FLAGS ...)命令之前有project 行。

project命令在第一次运行时执行了大量工作,并且实际上将此变量清除为副作用。因此,在第一次运行CMake时,编译器标志为空,然后始终包含set它们的内容。 (这是你第二次运行CMake导致make重新编译所有,而不是后续的CMake运行。)

尝试使用project包裹您的message来看效果:

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?

中的链接