CMake 基本用法

来源:互联网 发布:iphone软件源大全 编辑:程序博客网 时间:2024/06/08 10:30

1. 最基本的CMakeLists 文件

# 它将 main.c 编译为 hello 的可执行文件PROJECT (HELLO)    # 项目名称SET(SRC_LIST main.c)   # 源文件ADD_EXECUTABLE(hello ${SRC_LIST})  # 可执行文件

Cmake 是强烈推荐外部编译的,内部编译会生成一些无法自动删除的中间文件。使用 cmake [CMakeLists.txt path] 进行编译,会生成Makefile等文件,在此执行 make, 即可生成可执行文件。

2. 添加子文件

可以使用ADD_SUBDIRECROTY(source_dir [binary_dir][EXCLUDE_FROM_ALL])来添加下一层的 CMakeLists.txt, 并指定目录.


ADD_SUBDIRECTORY(src bin) # 将 src目录编译为 bin 目录

另外可以都可以通过 SET 指令重新定义 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置(指最终生成的 hello 或者最终的共享库,不包含编译生成的中间文件)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

3. 使用目标文件的安装:

  • 目标文件的安装

    INSTALL(TARGETS myrun mylib mystaticlib   RUNTIME DESTINATION bin  # 可执行二进制库   LIBRARY DESTINATION lib  # 动态库   ARCHIVE DESTINATION libstatic  # 静态库)
  • 普通文件的安装

    INSTALL(FILES README DESTINATION share)
  • 目录的安装

    INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj)  # icons 文件夹 scripts 目录下的所有文件

如果你要直接安装到系统,可以使用如下指令:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

4. 添加库

   ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})   # SHARED,动态库   # STATIC,静态库   # MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待   # 更新库版本号   SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)    # VERSION 指代动态库版本,SOVERSION 指代 API 版本

5. 使用外部共享库和头文件

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...) # 添加头文件包含路径TARGET_LINK_LIBRARIES(target library1 library2...) # 为 target 添加共享库

6. 其它

  • 设置最小的CMake 版本

    cmake_minimum_required(VERSION 3.1.0)
  • 限定使用 C++11

    # Use C++11set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)message(STATUS "C++11 support has been enabled by default.")
  • 常见的变量

    CMAKE_CURRENT_SOURCE_DIR  # 当前 CMakeLists 所在路径

原创粉丝点击