基本用法
cmake_minimum_required(VERSION 3.25)
project(cplus)
add_executable(hello main.cpp)
构建、编译 、安装
cmake ..
make
sudo make install
常用指令
set(自定义变量)
set(A_VAR a.cpp)
set(A_VAR “a .cpp”)
add_executable(a ${A_VAR})
message("source dir:" ${PROJECT_SOURCE_DIR})
内置变量
PROJECT_SOURCE_DIR
PROJECT_BINARY_DIR
message(cmake命令输出信息)
- STATUS 输出前缀 –
- SEND_ERROR 产生错误,生成过程被跳过
- FATAL_ERROR 立即终止所有 cmake 过程
message("source dir:" ${PROJECT_SOURCE_DIR})
message(STATUS "source dir:" ${PROJECT_SOURCE_DIR})
message(SEND_ERROR "source dir:" ${PROJECT_SOURCE_DIR})
message(FATAL_ERROR "source dir:" ${PROJECT_SOURCE_DIR})
add_subdirectory(多级目录编译)
cplus
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── eigen_main.cpp
add_subdirectory(src bin)
install(安装)
- FILES 文件
- PROGRAMS 非目标文件的可执行程序安装(比如脚本之类)
- DIRECTORY 拷贝
install(FILES xxx DESTINATION /jeff/local)
install(PROGRAMS xxx DESTINATION /jeff/bin)
install(DIRECTORY xxx DESTINATION /jeff/doc)
静态库与动态库
编译
SET(A_SRC a.cpp)
ADD_LIBRARY(a_static STATIC ${A_SRC})
SET_TARGET_PROPERTIES(a_static PROPERTIES OUTPUT_NAME "a")
SET_TARGET_PROPERTIES(a_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
ADD_LIBRARY(a SHARED ${A_SRC})
SET_TARGET_PROPERTIES(a PROPERTIES OUTPUT_NAME "a")
SET_TARGET_PROPERTIES(a PROPERTIES CLEAN_DIRECT_OUTPUT 1)
安装共享库和头文件
INSTALL(FILES a.h DESTINATION include/a)
INSTALL(TARGETS a a_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
`cmake -D CMAKE_INSTALL_PREFIX=/usr ..`
引用
- 动静态库应该放在add_executable指令之后
INCLUDE_DIRECTORIES(/usr/include/a)
LINK_DIRECTORIES(/jeff/cplus/libs)
TARGET_LINK_LIBRARIES(hello liba.a)