type
status
date
slug
summary
tags
category
icon
password

构建可执行程序

如:
或者源码目录:

构建动态链接库/静态库

STATIC:表示静态库,如libname.a
SHARED:表示动态链接库,如libname.dylib
MODULE:表示可以用类似dlopen得方法动态加载库,如libname.so
构建出来的库名字会自动加上lib前缀,如libname.alibname.dyliblibname.so
如:

添加头文件

include_dir.h文件所在的文件夹

添加源文件

查找把./src下所有源文件,并保存到变量DIR_SOURCES中,后面可以使用${DIR_SOURCES}表示.
需要注意的地方是:
  • aux_source_directory不会递归包含子目录,仅包含指定的目录.
  • 当添加源文件时,如需重新编译,得重新运行cmake
还可以使用CMAKE_CURRENT_LIST_DIR内置变量:

添加子目录

除了写helloworld,一般都需要配置多个源码目录,这个时候可以使用add_subdirectory命令,其中source_dir表示子目录中CMakeList.txt所在的路径,binary_dir表示输出目录.

查找依赖库

  • 通过link_directories (极少使用)
    • linker会在这些定义的目录里查找依赖的库.如lib文件夹下放置一个libskia.so库文件:
      最后链接的时候:
      这个时候,会自动到上面包含的lib文件下去寻找libskia.so(或者libskia.a,libskia.dylib)文件.
      使用XCode等项目生成器需要根据架构动态切换依赖库,或者库本身依赖私库等情况会使用这个命令,一般使用find_library()替换.
  • 通过find_library
    • 如果库被找到,结果会被存储到变量VAR中.如果没有找到库文件,则结果会被存储到<VAR>-NOTFOUND.如:
  • 通过find_package
    • cmake中自带了一些cmake脚本,通过cmake --help-module-list命令即可查看.拿libpng举例:
      如果遇到已有脚本存在,但是就是无法找到的情况,无需在此浪费时间,换一种查找方法即可.

链接库文件

这其中item可以是下面的任何一种:
  • 库名(不带lib前缀,不带后缀)
    • 库文件的完整路径
    • 表达式

    自定义输出路径

    • 指定执行文件输出路径
      • 指定Debug/Release版本
      • 指定库文件输出路径
        • 指定Debug/Release版本
          • 指定Debug/Release版本后缀名

          内置变量

          • CMAKE_CURRENT_LIST_DIR
            • 当前CMakeList.txt所在目录
          • PROJECT_NAME
            • 项目名
          • PROJECT_SOURCE_DIR
            • 源码目录
          Modern C++的一些特性C++中的typedef
          Loading...