PROJECT_SOURCE_DIR与PROJECT_BINARY_DIR并不像一些网站上说的是一样的,两者并不相同。首先看一下官方对两者的定义:
PROJECT_SOURCE_DIR
Top level source directory for the current project.
This is the source directory of the most recent project() command.
PROJECT_BINARY_DIR
Full path to build directory for project.
This is the binary directory of the most recent project() command.
这个解释不是很好懂,结合一个例子说明下。比如一个工程目录结构如下:
project
| CMakeLists.txt
| source1.cxx
CMakeLists.txt内容如下:
cmake_minimum_required (VERSION 3.0)
project (myProject)
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
add_executable (t1 source1.cxx)
如果在CMakeLists.txt所在的目录运行cmake . 的话,可以看到两个变量的值分别为:
PROJECT_SOURCE_DIR=C:/Codebase/Learnings/camkelearn3
PROJECT_BINARY_DIR=C:/Codebase/Learnings/camkelearn3
就是当前的目录。 实际上一般成熟的工程不会把source文件与cmake生成的文件放在一起,而是会放到不同的目录中。比如下面的目录结构:
project
|____sources
| | source1.cxx
| | CMakeLists.txt
____build
在build目录中运行cmake ../sources/
,可以看到两个变量的值分别为:
-- PROJECT_BINARY_DIR=C:/Codebase/Learnings/camkelearn3/build
-- PROJECT_SOURCE_DIR=C:/Codebase/Learnings/camkelearn3/sources