什么是关键词的含义PUBLIC,PRIVATE以及INTERFACE相关的CMake的target_include_directories?
TMa*_*nte 85
这些关键字用于指示何时需要传递给目标的包含目录列表.到什么时候,这意味着是否需要那些包含目录:
当CMake的是编译一个目标,它使用目标INCLUDE_DIRECTORIES,COMPILE_DEFINITIONS和COMPILE_OPTIONS性能.当您使用PRIVATE关键字in target_include_directories()和类似时,您告诉CMake填充这些目标属性.
当CMake检测到目标A与另一个目标B之间存在依赖关系时(如使用该target_link_libraries(A B)命令时),它会将B 使用要求传递到A目标.这些目标使用要求 是包含目录,编译定义等,任何依赖的目标B必须满足.它们由INTERFACE_*上面列出的属性版本(如INTERFACE_INCLUDE_DIRECTORIES)指定,并INTERFACE在调用target_*()命令时使用关键字填充.
的PUBLIC关键字大致装置PRIVATE + INTERFACE.
因此,假设您正在创建一个A使用某些Boost标头的库.你会这样做:
target_include_directories(A PRIVATE ${Boost_INCLUDE_DIRS})如果你只在源文件(.cpp)或私有头文件(.h)中使用那些Boost头.target_include_directories(A INTERFACE ${Boost_INCLUDE_DIRS})如果您不在源文件中使用这些Boost标头(因此,不需要它们进行编译A).我实际上无法想到一个现实世界的例子.target_include_directories(A PUBLIC ${Boost_INCLUDE_DIRS})如果你在公共头文件中使用那些Boost头文件,这些头文件包含在某些A源文件中,并且也可能包含在A库的任何其他客户端中.CMake 3.0文档提供了有关此构建规范和使用要求属性的更多详细信息.
usr*_*567 11
INTERFACE,PUBLIC和PRIVATE关键字需要指定以下参数的范围.PRIVATE和PUBLIC项将填充<target>的INCLUDE_DIRECTORIES属性.PUBLIC和INTERFACE项将填充<target>的INTERFACE_INCLUDE_DIRECTORIES属性.以下参数指定包含目录.
从文档:http://www.cmake.org/cmake/help/v3.0/command/target_include_directories.html
用我自己的话来改写文档: