CMake是一个跨平台的开源构建工具,用于管理软件构建过程。在CMake中,INTERFACE_LINK_LIBRARIES是一个装饰器,用于指定一个目标(target)所依赖的库。 具体来说,装饰...
在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
set_target_properties(lua_flatbuffers PROPERTIES INTERFACE_LINK_LIBRARIES "") 1. 如果编译出现问题,cmake之后可以用make VERBOSE=1来编译程序,各种参数一清二楚,方便查找问题 -o /home/test/code/MServer/server/bin/master -Wl,-Bstatic -llua -luuid -lflatbuffers -lmariadbclient -lmongoc-static-1.0...
下面是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(my_target PUBLIC another_library) INTERFACE: 当目标自身不需要此链接库,但其他目标链接了这个目标时使用。 其他目标链接这个目标时,它们会继承这个链接库,但目标自身不会链接这个库。 这主要用于头文件只的库或者当你只想传递链接依赖而不实际链接它们时。
在CMake 中,target_include_directories 和 target_link_libraries 命令使用 PRIVATE、PUBLIC 和 INTERFACE 关键字来控制包含目录和链接库的传递性。 PRIVATE:仅对目标自身可见。其他依赖该目标的目标无法访问这些包含目录或链接库。 PUBLIC:对目标自身和所有依赖该目标的目标都可见。即,包含目录或链接库会被传递给依赖该...
CMake中的target_link_directories命令用于将链接目录添加到target,其格式如下: target_link_directories(<target> [BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) 1. 2. 3. 指定链接器在链接给定target时应在其中搜索库的路径。每项(each item)可以是绝...
但是单纯看libbar.so或者app这些文件,是没有什么PRIVATE,INTERFACE,PUBLIC的依赖关系的。例如,PRIVATE或者PUBLIC生成的libbar.so就是完全一样的,它们的ELF头中都写入了libfoo.so的依赖项,我们完全可以把PRIVATE生成的libbar.so拿出来,然后自己手动编译app,指定--copy-dt-needed-entries参数,没有任何问题,跟上边PUBLIC...
这里我们使用CMake。 在一个CMake工程中,我们会使用cmake命令生成一个Makefile文件,然后,用make命令...
target_link_libraries(bar INTERFACE foo)编译发现bar.cpp: undefined reference to `foo()',bar找不到foo()这个符号,但是main能够找到foo(),也就是库foo通过bar传递给main,但是bar自身并不能使用这个库。 target_link_libraries(bar foo)如果省略,默认为PUBLIC。