gpt4 book ai didi

cmake - 如何强制CMake链接到系统库而不是同名目标

转载 作者:行者123 更新时间:2023-12-01 07:05:50 31 4
gpt4 key购买 nike

我有一个与系统库同名的库。我项目中的大多数可执行文件链接到我自己的库,但一个可执行文件需要链接到系统库。 CMake 正在生成链接到 ../foo/libfoo.a 的 g++ 命令行,我需要它链接到 -lfoo。

我有这样的结构:

/CMakeLists.txt

add_directory(foo)
add_directory(program)

/foo/CMakeLists.txt

add_library(foo foo.cpp)

/程序/CMakeLists.txt

add_executable(program program.cpp)
target_link_libraries(program foo)

一种解决方案是更改我的库的名称,这样它就不会发生冲突,但出于某些原因我宁愿不这样做。我正在寻找一些 CMake 魔法,让我告诉它使用系统库。

最佳答案

I'd rather not do that because reasons.

我可以看到你的手在这里被束缚了 :) 所以我建议使用 find_library 来“查找”系统库并链接到那个。如果成功,find_library 将产生库的绝对路径,如果您在后续的 target_link_libraries 调用中使用该变量,它应该不会留下歧义的余地。

所以在“/program/CMakeLists.txt”中,是这样的:

find_library(SystemFoo NAMES foo)
add_executable(program program.cpp)
target_link_libraries(program ${SystemFoo})

您甚至可能希望将一些 NO_xxx_PATH 参数(例如 NO_CMAKE_ENVIRONMENT_PATH 和/或 NO_CMAKE_PATH)包含到 find_library 调用以减少 CMake 将搜索库的位置数。

关于cmake - 如何强制CMake链接到系统库而不是同名目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505199/

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