附加包含目录
- 函数
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
- 使用示例
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../../include/
${CMAKE_CURRENT_SOURCE_DIR}/../widget/
${CMAKE_CURRENT_SOURCE_DIR}/../ui_base/)
${CMAKE_CURRENT_SOURCE_DIR}
表示当前CMakeLists.txt
所在目录,实例中所描述的目录层级如下所示:
|--root
|--source
|--login_module
|--CMakeLists.txt
|--widget
|--........
|--ui_base
|--........
|--include
|--login_module
|--........
这里需要注意的是include_directories
命令不包含子目录
,例如,引用include目录下的login_module
文件夹中的声明文件时,就需要指定login_module
,示例如下:
#include "login_module/ILoginService.h"
文件操作
可以使用file
命令在编译时对文件进行读写操作,这里目前只是用GLOB
将某个目录下的源码文件全部获取,生成一个list,编译时通过变量传给add_executable
或者add_library
而不用一个一个将源码写在上述两个函数中的参数中。
- 函数
file(GLOB <variable>
[LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
[<globbing-expressions>...])
- 使用示例
# 获取某个目录下的全部文件
file(GLOB login_module_src ./*
widget_src ./../widget/*)
# 使用结果
add_library(LoginModule SHARED
${widget_src}
${login_module_src})
这个函数的默认路径也是当前CMakeLists.txt
文件所在目录。
指定编码设置
- 函数
add_compile_options(<option> ...)
- 使用示例
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
在使用MSVC编译器时可以使用这个设置,其他环境下未知。
设置预定义
- 函数
add_definitions(-DFOO -DBAR ...)
- 使用示例
add_definitions(-DDATABASE_MODULE_LIB)
定一个DATABASE_MODULE_LIB
宏。
编译成可执行文件
- 函数
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
- 使用示例
add_executable(TJAnalysis
main.cpp)
设置可执行文件输出目录
- 函数
set(<variable> <value>... [PARENT_SCOPE])
- 使用示例
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../x64_debug/)
编译成库文件
- 函数
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
- 使用示例
add_library(DatabaseModule SHARED
${database_module_src}
)
其中使用SHARED
表示动态库,使用STATIC
表示静态库。
设置库文件输出目录
- 函数
set(<variable> <value>... [PARENT_SCOPE])
- 使用示例
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../x64_debug/)
添加编译子模块路径
- 函数
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM])
- 使用实例
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/source/login_module)
注意,添加的路径文件夹下边一定要一个CMakeLists.txt
文件,上述示例中文件的对应关系如下所示:
|--root
|--source
|--login_module
|--CMakeLists.txt
|--........
|--CMakeLists.txt # 示例文件