cmake

  1. set的变量可以在程序中的宏中使用

  2. add_library.

    1. shared:生成.so或.dll文件,不嵌入代码,在使用时会根据.h来进行查找
    2. static:直接将相关代码嵌入任何需要的地方,非常冗余,但很完整
    3. interface:接口库,不单独生成库,只是作为接口给其他库使用

    后面只跟随相关源文件

  3. target_link_libraries,属性一般与target_include_directories保持一致

    1. 如果是public,则这个库可以被该库和依赖于该库的其他所有的使用
    2. 如果是private,则只能被当前这个文件夹的其他文件所使用,在这种情况下也就不用提供头文件
    3. 如果是interface,则当前文件夹不使用,但可以被其他的使用,一般用于设定一些设置或者全是头文件的情况下,或者该文件夹下不互相调用
  4. target_include_directories(要被连接到的库 方式 库)(指定头文件)

    1. private:自身要include,依赖于该库的不需要include这些
    2. public:自身要include,依赖于该库的需要include这些
    3. interface:自身不要include,依赖于该库的需要include这些
  5. add_subdirectory(…)

    生成的时候会按这个顺序,但是编译的时候则不会,会根据依赖的关系

    添加子文件夹,并处理子文件夹中的cmakelists,但是cmake中的依赖关系并不是上依赖于下的,也可以下依赖于上,也就是library是可以被子文件夹所使用的,一切看target_link_library。

  6. if(…)

    elseif(…)

    endif()

    matches即=

  7. option(name description default)

    和set差不多,但是可以在cmake的option中直接调整

  8. include(某个cmake文件)相当于将该文件中的内容复制过来

  9. add_custom_command相当于用命令行运行某条命令

    output

    command

    depends


cmake
https://lhish.github.io/project/cmake/
作者
lhy
发布于
2024年6月30日
许可协议