CMake语法笔记(2)
包括多个子文件时:
add_subdirectory(sublibrary1)
add_subdirectory(sublibrary2)
add_subdirectory(subbinary)添加子目录
会创建name_SOURCE_DIR,name_BINARY_DIR的引用路径。
如果有一个库被创建为仅标头的库,则cmake支持INTERFACE目标,以允许创建没有任何构建输出的目标。
add_library($ {PROJECT_NAME} INTERFACE)
configure——files 变量替换,可用于版本控制等
set (VERSION_MAJOR 0)
configure_file(xx.h.in ${PROJECT_BINARY_DIR}/xx.h)
path.in.h中
#findef __PATH_H__
#define __PATH_H__
const char *path = "@CMAKE_SOURCE_DIR@";
#endif
变量在.h.in中但是值来自CMakeLists中的set,camke后值被附到头文件中生成.h文件,源文件引用头文件获得变量值。
static analysis
scan-build
$ scan-build-3.6 cmake .. $ scan-build-3.6 make
set(CMAKE_BUILD_TYPE DEBUG)
set (CMAKE_EXPORT_COMPILE_COMMANDS ON ) //have camke to build a compile database
clang-format
CPPCHECK
单元测试
生成安装包
eg.在make install的基础上加
set(CPACK_GENERATOR "DEB")
include(CPack)
# Set a Package Maintainer.
# This is required
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Thom Troy")
# Set a Package Version
set(CPACK_PACKAGE_VERSION ${deb_example_VERSION})
包管理
1.将第三方代码包含在存储库中,并将其构建为项目的一部分。
2.直接下载构建
include(ExternalProject)
ExternalProject_Add(googletest
URL https://github.com/google/googletest/archive/bfc0ffc8a698072c794ae7299db9cb6866f4c0bc.tar.gz_
)
3.conan