下面是target_link_libraries中的解释,不想看英文的,直接拉到最后。 Link Inheritance Similarly, for anytarget, in the linking stage, we would need to decide, given theitemto be linked, whether we have to put theitemin the link dependencies, or the link interface, or both, in the compiledtarg...
target_link_libraries(sample_add add_shared) # 若注释掉此句,则会报 error: sample_add.cpp:(.text+0x25): undefined reference to 'add(int, int)' 1. 2. 3. 4. 5. 6. 7. 8. 2.Libraries for a Target and/or its Dependents:PUBLIC, PRIVATE和INTERFACE关键字可用于在一个命令中指定link de...
如果SYSTEM与PUBLIC或INTERFACE一起使用,则INTERFACE_SYSTEM_INCLUDE_DIRECTORIES target属性将填充指定的目录。 target_include_directories的参数可以使用语法为$<...>的"生成器表达式"。 指定的包含目录可以是绝对路径或相对路径。相对路径将被解释为相对于当前源目录(即CMAKE_CURRENT_SOURCE_DIR),并在存储到关联的targe...
在CMake 中,target_include_directories 和 target_link_libraries 命令使用 PRIVATE、PUBLIC 和 INTERFACE 关键字来控制包含目录和链接库的传递性。 PRIVATE:仅对目标自身可见。其他依赖该目标的目标无法访问这些包含目录或链接库。 PUBLIC:对目标自身和所有依赖该目标的目标都可见。即,包含目录或链接库会被传递给依赖该...
<target>:目标目标的名称。 <PRIVATE|PUBLIC|INTERFACE>:可选的关键词,用来指定链接库的范围,分别表示私有的、公开的或接口的链接库。默认为 PUBLIC。 <item>:要链接的库的名称。 这个命令的作用是将指定的库链接到目标目标中。可以使用多个 target_link_libraries 命令来链接多个库。每个命令可以指定不同的范围(PR...
PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。那么在 hello-world/CMakeLists.txt 中应该写入: target_link_libraries(hello-world PUBLIC hello) target_include_directories(hello-...
target_link_libraries(my_target PUBLIC another_library) INTERFACE: 当目标自身不需要此链接库,但其他目标链接了这个目标时使用。 其他目标链接这个目标时,它们会继承这个链接库,但目标自身不会链接这个库。 这主要用于头文件只的库或者当你只想传递链接依赖而不实际链接它们时。
target_link_libraries(bar PUBLIC foo) 链接为public,main函数正常调用foo(),bar中正常调用foo(),库foo链接给bar,同时foo也被传给了main。 target_link_libraries(bar PRIVATE foo) 编译,发现main.cpp: undefined reference to `foo()',main.cpp这个编译单元找不到foo()这个符号,库foo链接到bar就被终结了,bar...
在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
在CMake中,target_link_libraries函数用于将一个目标(target)与所需的库进行链接。它的语法如下:vb...