gpt4 book ai didi

cmake - CMake:将库链接到库

转载 作者:行者123 更新时间:2023-12-03 13:35:22 25 4
gpt4 key购买 nike

我的cmake有问题。可以说,我有CMakeLists1,它具有CMakeLists2所在的子目录。

在CMakeLists2中,我的目标是静态库。我想将其链接到外部库。
我已经做到了:

link_directories ("path_to_library")
add_library (project2 ${sources})
target_link_libraries (project2 "name_of_external_lib")

然后,我想在我的project1中使用这个project2中的类。我做到了:
add_executable (project1 ${sources})
target_link_libraries (project1 project2)

但这根本不起作用。首先,project2没有链接到外部库。为了进行检查,我通过vs10项目属性添加了该库,并且大小有所不同。第二件事,project1以某种方式看到了外部库(它在该项目的库依赖项中),当然找不到它。

问题是什么?

最佳答案

我认为不将project2链接到外部库是CMake的默认行为,
而是将两个库都链接到可执行文件。
摘自《掌握CMake》一书。

Since static libraries do not link to the libraries on which they depend, it is important for CMake to keep track of the libraries so they can be specified on the link line of the executable being created.



您可以尝试在CMakeLists2中使用绝对路径:
add_library (project2 ${sources})
target_link_libraries (project2 "path to ext lib"/"name of ext lib")

或者你可以添加
link_directories ("path_to_library")

到project1的CMakeLists文件。

如果您真的想在Visual Studio中执行类似的操作,则可以使用此 answer中给出的命令在CMake中构建custom_command。
它可能看起来像这样(我没有测试)。
set(EXT_LIB "path_to_library/name_of_external_lib") 
set(BIG_LIB "path_to_big_lib/name_of_big_lib")
add_library (project2 ${sources})
get_property(PROJ2_LOC TARGET project2 PROPERTY LOCATION)

add_custom_command(OUTPUT ${BIG_LIB}
DEPENDS ${EXT_LIB} project2
COMMAND "lib.exe /OUT:${BIG_LIB} ${EXT_LIB} ${PROJ2_LOC} )

然后,您可以将可执行文件与 $ {BIG_LIB} 链接。

您必须考虑的一些事情:
  • 也许您必须使用 LOCATION_CONFIG (CMake docs,我在this answer中找到了get_property命令)
  • link.exe必须在您的路径中
  • 如果要在其他CMakeLists.txt中使用
  • ,请监视 BIG_LIB 变量的范围

    关于cmake - CMake:将库链接到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14468678/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com