然而,link_directories命令有一个重要的限制:它会影响之后的所有目标。这意味着,如果你在不同的地方使用link_directories设置了不同的库目录,那么这些设置可能会互相覆盖,导致混淆和不可预见的行为。 target_link_directories 为了避免link_directories的缺点,CMake提供了target_link_directories命令。这个命令允许你为特定...
使用link_directories和target_link_directories都是为了能够链接库,但是link_directories只能在本目录下使用,而target_link_directories是全局的。 比如通过add_library添加子类,如果link_directories语句放在add_library后面,则该子类不会链接link_directories库,使用target_link_directories就不用担心顺序问题,全局都能链接。
当我们在写CMakeLists.txt文件时,常常会搞不明白link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下面就其详细介绍:它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用(这里特指c++。c和 Java 中用法类似)。比如:语法:它相当于g++...
link_directories会对当前CMakeLists.txt文件的目标文件生效,并会通过add_subdirectory调用传递到子目录;target_link_directories则针对指定的目标文件生效。 target_link_directories对于指定目标添加的目录,INTERFACE和PUBLIC会添加到<target>的INTERFACE_INCLUDE_DIRECTORIES属性,PUBLIC和PRIVATE会添加到<target>的INCLUDE_DIRECTO...
target_link_directories()和target_link_libraries() "target_link_directories"是一种指令,用于将链接库的目录添加到一个特定的CMake目标中。 具体来说,当你使用CMake来构建一个项目时,你可以用"target_link_directories"指令将一个目标与一个或多个库目录链接起来。例如,假设你的项目需要链接一个名为"mylib"的...
target_link_libraries(<target> [item1] [item2] [...] [[debug|optimized|general] <item>] ...) 上述指令中的<target>是指通过add_executable()和add_library()指令生成已经创建的目标文件。而[item]表示库文件没有后缀的名字。默认情况下,库依赖项是传递的。当这个目标链接到另一个目标时,链接到这个...
两者的区别 include_directories: link_libraries用在add_executable之前,target_link_libraries用在add_executable之后 target_include_directories: link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照header file + .lib + .dll方式隐式调用动态库的.lib库 使用建议 target_include_directories() ...
注意:在link_directories(lib)对所有target的生成都指定-L,而target_link_directories(a PRIVATE lib)只对a这个target指定-L 选项.target_link_directories(a PUBLIC lib)则对工程里链接了targeta的其他target也自动指定-L. 此时老开心了,编译过了是吧.一运行程序./test: 人傻了,找不到库. ...
link_directories / target_link_libraries 含义应该是同上的 嵌套头文件的引用问题。 在子项目中,include的用法可以帮助当前环境找到头文件,但在外部的项目引用子项目时,子项目中的include的相关命令对外部项目无效,外部项目的引用只与他自己的include命令相关,因此,在子项目中的源文件中尽量使用绝对路径的文件。且在子...