如果存在多个依赖项,则强制cmake选择依赖项的位置

时间:2015-01-08 13:26:39

标签: c++ ubuntu cmake

在目录/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文件,而创建可执行文件会导致libBar.so目录中usr/lib文件的依赖性?

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

1 个答案:

答案 0 :(得分:0)

回答问题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)