【问题标题】:Forcing cmake to choose location of dependency if more than one exist如果存在多个依赖项,则强制 cmake 选择依赖位置
【发布时间】:2015-01-08 13:26:39
【问题描述】:

/home/karnivaurus/Project 目录中,我有三个文件。我有一个类文件Foo.cpp、一个共享库文件libBar.so 和一个CMakeLists.txt 文件。我也有一个类似的共享库,同名libBar.so,位于/usr/lib

CMakeLists.txt 包含以下内容:

add_library(Foo SHARED Foo.cpp)
target_link_libraries(Foo Bar)

运行cmake 后,库编译正常并创建libFoo.so。如果我再运行命令ldd libFoo.so,则表明存在对/home/karnivaurus/Project/libBar.so的依赖。

现在,我改变了一些东西,而不是创建一个共享库,我想创建一个可执行文件,所以,我创建一个新文件 Main.cpp,它调用 Foo.cpp 中的函数,并将 CMakeLists.txt 更改为:

add_executable(Foo Foo.cpp Main.cpp)
target_link_libraries(Foo Bar)

这编译得很好,并创建了一个可执行文件Foo。但是,如果我现在运行 ldd Foo,它会告诉我存在对 /usr/lib/libBar.so 的依赖。

所以我的问题是:

1) 为什么创建共享库会导致依赖源目录中的libBar.so 文件,而创建可执行文件会导致依赖usr/lib 目录中的libBar.so 文件?

2) 如何强制 cmake 创建对其中一个而不是另一个的依赖?

【问题讨论】:

    标签: c++ ubuntu cmake


    【解决方案1】:

    回答问题 2

    这应该使Foo链接/home/karnivaurus/Project/libBar.so

    link_directories( /home/karnivaurus/Project )
    add_executable(Foo Foo.cpp Main.cpp)
    target_link_libraries(Foo Bar)
    

    如果这不起作用,您可以随时在对target_link_libraries 的调用中添加库的绝对路径:

    target_link_libraries(Foo /home/karnivaurus/Project/libBar.so)
    

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 2022-10-04
      • 2020-06-03
      相关资源
      最近更新 更多