CmakeLists相关tips

Cmake中获取当前工程的目录

CMAKE_SOURCE_DIR确实是指定义了顶级CMakeLists.txt的文件夹.但是, PROJECT_SOURCE_DIR是指包含最近的project()命令的CMakeLists.txt的文件夹
假设有一个名为Outer的顶级项目,它包含一个子目录,其自己的项目叫做Inner.外面的CMakeLists.txt有:

project(Outer)
add_subdirectory(Inner)

和内在的:

project(Inner)

然后在这两个CMakeLists文件中,CMAKE_SOURCE_DIR将引用Outer的源目录.但是外部PROJECT_SOURCE_DIR也是同一个目录,而Inner并不是这样. Inner的PROJECT_SOURCE_DIR是包含其CMakeLists.txt的子目录.

Cmake中添加宏定义

CMake 中标准的添加宏定义方法是使用 ADD_DEFINITIONS(-DPROJECT_PATH) ,不过这需要修改 CMakeLists.txt 文件。如果想要在命令行上定制宏的开关或取值,那么可以像 这里 一样,定义一个 CMake 选项:

OPTION(DEFINE_A "Option description" ON) # Enabled by default

然后做一个条件判断:

IF(DEFINE_A)
    ADD_DEFINITIONS(-DA)
ENDIF(DEFINE_A)

之后,就可以用 cmake -DDEFINE_A=OFF .. 调整宏的开关或取值了

add_definitions(-DPROJECT_PATH="${PROJECT_SOURCE_DIR}")

在CPP中可以直接通过获取到工程的目录

string path = (std::string)PROJECT_PATH;
posted @ 2021-03-31 18:50  顾月北灬  阅读(153)  评论(0)    收藏  举报