【发布时间】: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 创建对其中一个而不是另一个的依赖?
【问题讨论】: