目的
在cmakelists文件中可以检测当前工作的目录,如果把cmakelist自己识别的路径传递给程序文件中,就可以少输入一些参数,使得程序更见简洁还不需要改动代码。
方式
cmakeList文件样例,其中configure_file圈起来的东西一个是对哪个文件进行设定参数,把设定参数后会生成一个新的替换文件,这个文件叫什么名在哪是第二个参数指定的。这里就是在工程的source目录下找到head.h.in文件,替换里面cmakelist设定的参数后,生成为head.h的文件。
cmake_minimum_required(VERSION 3.0.2)
project(ORB)
SET(CMAKE_BUILD_TYPE "Release")
add_compile_options(-std=c++11)
add_definitions(-std=c++11)
set(WORK_SPACE_PATH ${PROJECT_SOURCE_DIR})
configure_file(
${PROJECT_SOURCE_DIR}/head.h.in
${PROJECT_SOURCE_DIR}/head.h
)
include_directories(${PROJECT_BINARY_DIR}/include)
add_executable(main main.cpp)
head.h.in文件,其中的"@WORK_SPACE_PATH@"部分就是去cmakelist中set的那个变量
#ifndef GLOBAL_DEFINATION_H_IN_
#define GLOBAL_DEFINATION_H_IN_
#include <string>
const std::string WORK_SPACE_PATH = "@WORK_SPACE_PATH@";
#endif
结论
cmake为我们生成了head.h文件