养成喜欢进行外部编译(out-of-source build) 而不是in-source build
out-of-source build一般在源文件的顶层目录中 新建build目录
对于命令行可以 cd build
然后 cmake .. -G"MinGW Makefiles"即可
这样所有的临时文件 都会放在build目录下不会和source有任何的瓜噶。
但是必须注意:
status F:/cmake/cmake-2.8.11.2/Tutorial/Step2 This is a Project_source_dir
status F:/cmake/cmake-2.8.11.2/Tutorial/Step2/build This is a Project_binary_dir
也就是
Message(status " " ${PROJECT_SOURCE_DIR} " This is a Project_source_dir")
Message(status " " ${PROJECT_BINARY_DIR} " This is a Project_binary_dir")
这两个参数要注意他们的不同之处!
发现一个CMake的bug
当前若是
ADD_SUBDIRECTORY(. bin)放在CMakeListsts.txt的顶层目录中会出现 一直在build目录创建bin bin bin的目录
ADD_SUBDIRECTORY(src bin) 通过这个想尝试上面那个。而且删了老半天都删不完,我操。就像中病毒一样
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
# The version number.
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
ADD_SUBDIRECTORY(. bin) #因为其实大伙肯定不会这样玩 肯定是每个目录一个CMakeLists 却没想到会这样。
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
"${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
"${PROJECT_BINARY_DIR}/TutorialConfig.h"
)
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
include_directories("${PROJECT_BINARY_DIR}")
# add the executable
add_executable(Tutorial tutorial.cxx)
如何从
一个目录的三个文件即
----CMakeLists.txt
----tutorial.cxx
----Tutorial.config.in
到下面的文档结构呢?
├─Step1
│ ├─build
│ │ ├─bin
│ │ │ └─CMakeFiles
│ │ │ └─Tutorial.dir
│ │ └─CMakeFiles
│ │ ├─2.8.11.2
│ │ │ ├─CompilerIdC
│ │ │ └─CompilerIdCXX
│ │ └─CMakeTmp
│ └─src
|
——CmakeLists.txt
|=======CMakeLists.txt(主要用于add_subdirectory(src bin) 最后会把所有的东西都放到bin中 当然你也是可以通过EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH对目标名字和路径等进行修改)
上面的内容可以参考:
CMake Pratice这一文章,或者参考我http://hi.baidu.com/jueqingsizhe66/item/dd99f18a1ef64e16c2162751
即可。