美文网首页
学习CMake(二)

学习CMake(二)

作者: IT孤独者 | 来源:发表于2018-09-06 22:03 被阅读0次

    上面写了一个大概,本篇文章主要介绍 target 的属性。target 指的就是 executable 文件和 liabrary 文件。

    target_include_directories(), target_compile_definitions(), target_compile_options() 。
    说实话,我不是很清楚这三个函数的作用,所以我只能根据我的经验来猜测他们大致的意思!

    首先三个 command 都是针对 target 的,include_directories 应该是关联查找*.h的路径,compile_definitions 应该是定义编译的宏信息,compile_options 应该是给cmake命令用的,用来决定使用什么编译方式。

    另外这个三个命令还有三个额外的模式private, public, interface。

    private指的是将属性只应用到本target
    public指的是将属性应用到本target和以后link的所有target
    interface指的是讲属性应用到以后link的所有target

    INCLUDE_DIERECTORIES,COMPILE_DEFINITIONS,COMPILE_OPTIONS 存入了具有private 和 public的模式

    INTERFACE_INCLUDE_DIRECTORIES,INTERFACE_COMPILE_DEFINITIONS,INTERFACE_COMPILE_OPTIONS 存入具有 interface 和 public 的模式

    set(srcs archive.cpp zip.cpp)
    if (LZMA_FOUND)
      list(APPEND srcs lzma.cpp)
    endif()
    add_library(archive SHARED ${srcs})
    if (LZMA_FOUND)
      # The archive library sources are compiled with -DBUILDING_WITH_LZMA
      target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA)
    endif()
    target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
    
    add_executable(consumer)
    # Link consumer to archive and consume its usage requirements. The consumer
    # executable sources are compiled with -DUSING_ARCHIVE_LIB.
    target_link_libraries(consumer archive)
    

    上面的代码 archive 的 target 具有 -DBUILDING_WITH_LZMA,但是不具有 -DUSING_ARCHIVE_LIB,这个是 PRIVATE 和 INTERFACE 的区别,另外 consumer 的 target 不具有 -DBUILDING_WITH_LZMA,具有 -DUSING_ARCHIVE_LIB!

    像 LZMA_FOUND 这个东西,就是一个OPTIONS,这个是可以用 compile_options 的命令指定。

    相关文章

      网友评论

          本文标题:学习CMake(二)

          本文链接:https://www.haomeiwen.com/subject/afyfgftx.html