private, interface, public
某些cmake函数是为target指定traits的,这些参数需要指定上述3个keywors中的一个。而如果某个target是一个库,那么这3个keywords就尤其重要。
- private:指定的traits只作用于这个target,而不会作用于那些需要链接这个target的target。
- interface:相反的含义。这个traits只作用于那些需要链接该target的target,而不作用于该target。
- public:即private和interface的集合。
所谓的traits,举个例子就比如:要include的目录,C++ standard,等等。其对应于底层的INCLUDE_DIRECTORIES
(私有属性), INTERFACE_INCLUDE_DIRECTORIES
(接口属性), CXX_STANDARD
(C++标准这个属性不具备接口值)等变量。
以下函数可以为target添加traits:
-
target_link_libraries
: Other targets; can also pass library names directly -
target_include_directories
: Include directories -
target_compile_features
: The compiler features you need activated, likecxx_std_11
-
target_compile_definitions
: Definitions -
target_compile_options
: More general compile flags -
target_link_directories
: Don’t use, give full paths instead (CMake 3.13+,基本不怎么用,也不推荐使用) -
target_link_options
: General link flags (CMake 3.13+) -
target_sources
: Add source files