cmake笔记
cMakelists 主要函数
名称 | 描述 | |
---|---|---|
cmake_minimum_required | 最低版本声明 | |
project | 项目名称 | |
add_executable | 设置可执行程序 | |
add_library | 设置库 | |
add_subdirectory | 添加子目录 | |
link_directories | 指定路径 | |
target_link_libraries | 指定库 | |
target_compile_definitions | 宏定义 INTERFACE:这些定义对于目标的所有用户都是可见的。 PUBLIC:这些定义对于目标的所有用户和目标的所有依赖项都是可见的。 PRIVATE:这些定义仅对于目标内部是可见的,对于目标的所有用户和依赖项都是不可见的 | |
add_compile_options | 编译选型 | |
set | 设置变量值 | |
install | 安装命令 | |
message | 打印 | |
add_dependencies | 使顶级<目标>依赖于其他顶级目标 顶级目标是由add_executable()、add_library()或add_custom_target()命令创建的 | |
get_target_property | ||
SET_TARGET_PROPERTIES |
cmake变量设置方式
三种方式设置:
名称 | 描述 | |
---|---|---|
CMakelists.txt | 1. target_compile_definitions() 2. set (CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -DEX2”) 3.add_compile_options() | |
cmake | 例如:传递变量-DCMAKE_CXX_FLAGS=-O3 -D表示设置变量 -U表示取消变量 |
cmake变量列表
名称 | 描述 | |
---|---|---|
CMAKE_BUILD_TYPE | release 和 debug | |
CMAKE_C_COMPILER | C编译器 | |
CMAKE_CXX_COMPILER | C++编译器 | |
CMAKE_C_FLAGS | C编译器标志 | |
CMAKE_CXX_FLAGS | C++编译器标志 | |
CMAKE_LINKER_FLAGS | 设置链接器标志 | |
CMAKE_EXE_LINKER_FLAGS | 链接可执行文件时使用的链接器选项 | |
CMAKE_INSTALL_PREFIX | 指定安装的根目录 | |
CMAKE_PREFIX_PATH | 指定要搜索的库文件和头文件的目录 | |
CMAKE_MODULE_PATH | 指定要搜索的CMake模块的目录 | |
CMAKE_VERBOSE_MAKEFILE | 设置为ON时,会在编译过程中打印所有命令 |
CMAKE_C_FLAGS =
CMAKE_C_FLAGS_DEBUG = -g
CMAKE_C_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG
CMAKE_CXX_FLAGS =
CMAKE_CXX_FLAGS_DEBUG = -g
CMAKE_CXX_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG
递归install
解决安装中文件夹、文件不能同时安装的问题:
#!/bin/sh
# Program to use the command install recursivly in a folder
magic_func() {
echo "entering ${1}"
echo "target $2"
for file in $1; do
if [ -f "$file" ]; then
echo "file : $file"
echo "installing into $2/$file"
install -D $file $2/$file
elif [ -d "$file" ]; then
echo "directory : $file"
magic_func "$file/*" "$2"
else
echo "not recognized : $file"
fi
done
}
magic_func "$1" "$2"