Cmake中的PUBLIC,PRIVATE,INTERFACE
目录
- 在 CMake 中,
PUBLIC、PRIVATE和INTERFACE关键字用于指定目标属性的可见性。这些关键字通常与target_link_libraries()、target_include_directories()、target_compile_definitions()和target_compile_options()等函数一起使用。
-
PUBLIC:当使用PUBLIC关键字时,指定的属性将应用于当前目标以及链接到该目标的其他目标。换句话说,这些属性将成为当前目标的属性,同时也会传递给其他目标。例如:
1target_link_libraries(my_library PUBLIC another_library)这将使得
another_library成为my_library的依赖,并且任何链接到my_library的目标也将链接到another_library。 -
PRIVATE:当使用PRIVATE关键字时,指定的属性仅应用于当前目标,而不会传递给其他目标。例如:
1target_include_directories(my_library PRIVATE include/)这将使得
include/目录成为my_library的私有包含目录,但不会传递给链接到my_library的其他目标。 -
INTERFACE:当使用INTERFACE关键字时,指定的属性仅应用于链接到当前目标的其他目标,而不会应用于当前目标本身。例如:
1target_compile_definitions(my_library INTERFACE MY_LIB_DEFINE)这将使得
MY_LIB_DEFINE宏定义仅对链接到my_library的其他目标可见,而不会应用于my_library本身。
在使用这些关键字时,请根据属性是否需要传递给其他目标来选择合适的可见性。一般来说,库的公共头文件和依赖应使用 PUBLIC,私有头文件和编译选项应使用 PRIVATE,仅需要传递给其他目标的属性应使用 INTERFACE。