在目录/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创建一个依赖于其中一个而不是另一个?
答案 0 :(得分:0)
这应该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)