在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
add_library(Catch INTERFACE) target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR}) 那么我们将按照以下方式链接库: 代码语言:javascript 复制 target_link_libraries(cpp_test Catch) 我们从第一章,从简单可执行文件到库中的食谱 3,构建和链接静态和共享库的讨论中回忆起,INTERFACE库是 CMake 提供的...
add_library(MyLibExample simple_lib.cpp simple_lib.hpp) # Link each target with other targets or add options, etc. # Adding something we can run - Output name matches target nameadd_executable(MyExample simple_example.cpp) # Make sure you link your targets with this command. It can also...
如下是该函数的几种应用场景,比如STATIC是静态库,SHARED是动态库,OBJECT则是我们当前使用的目标文件。另外还有MODULE、INTERFACE和IMPORTED等类型。 add_library( [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [...]) add_library( OBJECT [...]) add_library( INTERFACE) add_library( IMPORTED [GLOBAL]) ...
[sublibrary2/CMakeLists.txt] - 创建静态库 #Set the project nameproject (sublibrary2)#cmake支持接口目标,创建为只包含头文件的库(允许在没有任何构建输出的情况下创建目标)add_library(${PROJECT_NAME} INTERFACE)add_library(sub::lib2 ALIAS ${PROJECT_NAME})target_include_directories(${PROJECT_NAME}...
cblas_interface mlir_runner_utils ) if(LLVM_BUILD_EXAMPLES) list(APPEND MLIR_TEST_DEPENDS toyc-ch1 toyc-ch2 toyc-ch3 toyc-ch4 toyc-ch5 toyc-ch6 toyc-ch7 pybind11_example ) endif() ... 而pybind11_example共享库是通过pybind11支持的pybind11_add_module函数定义的,这个函数相当于CMake中...
网上关于 target_link_libraries 中的PRIVATE, PUBLIC , INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。 因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_libraries中抄来的。 以下的解释主要场景是linux中,windows不存在这种关系,无需考虑。
add_library()默认定义的是static库,可以使用BUILD_SHARED_LIBS变量来改变默认行为。 target_link_libraries() 给二进制添加依赖 构建选项 target_include_directories()生成INCLUDE_DIRECTORIES, INTERFACE_INCLUDE_DIRECTORIES两个变量。如果只是用于库的实现,那应该用PRIVATE关键字;如果是库的头文件也使用了依赖,应该使用...
CMake Error at cmake/dependencies.cmake:15 (get_property): INTERFACE_LIBRARY targets may only have whitelisted properties. The property "LINK_LIBRARIES_ALL" is not allowed. SDK version number 1.9.160 Platform/OS/Hardware/Device What are you running the sdk on?
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) 1. 2. 3. 指定链接器在链接给定target时应在其中搜索库的路径。每项(each item)可以是绝对路径或相对路径,后者被解释为相对于当前源目录。这些项将被添加到链接命令中。 命名的<target>必须由诸如add_executable或add_library之类的命令创建,并且不能为ALIAS...