【问题标题】:How can I avoid linking directly to library files in cmake?如何避免直接链接到 cmake 中的库文件?
【发布时间】:2019-06-21 02:15:41
【问题描述】:

我正在 Mac 上使用 cmake 编写一个 c 项目。我用自制软件。我通过自制软件安装了 libpqxx。我有以下 CMakeLists.txt。

cmake_minimum_required(VERSION 3.11)
project(imagedb)

set(CMAKE_CXX_STANDARD 14)
add_executable(imagedb main.cpp)

target_link_libraries( imagedb /usr/local/lib/libpqxx.dylib)

在构建时,我想避免在此处使用绝对路径。鉴于 /usr/local 已经在路径前缀中,我该如何使用 cmake 执行此操作?

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    通常您应该使用find_package 来查找依赖项。

    查看libpqxx 的repo,你可以看到他们提供了一个CMake 配置文件。

    所以在你的CMakeLists.txt 文件中你只需要这样做:

    find_package(libpqxx REQUIRED)
    target_link_libraries(imagedb libpqxx::pqxx_shared)
    

    如果由于某种原因libpqxx-config.cmake 没有随自制版本一起提供,你必须写一个find file

    【讨论】:

    • 感谢您的回答。您能否通过查看回购扩展您如何获得“libpqxx::pqxx_shared”的答案?它也不起作用,所以我假设自制软件不提供 cmake 文件。
    • 我只是指向libpqxx-config.cmake,它不一定列出目标。包的目标通常在CMakeLists.txt 文件中定义并导出到libpqxx-targets.cmake 文件。查看src 目录中的CMakeLists.txt,您可以看到在78 行中,他们添加了一个名为pqxxs_hared 的库,然后在宏here 中将其导出为目标libpqxx::pqxx_shared
    • 在这种情况下,您应该编写一个Findlibpqxx.cmake 文件,如描述here
    猜你喜欢
    • 2012-10-05
    • 2020-05-04
    • 2021-12-16
    • 2018-05-14
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2012-04-29
    • 2013-01-06
    相关资源
    最近更新 更多