我对这个问题感到很累...我花了几天时间。
我使用target_link_libraries链接A与B和C
target_link_libraries(rootdir / B.lib rootdir / C.lib)
虽然B需要E和F目录中的其他文件,但我使用
link_directories(rootdir / E rootdir / F)
包含目录E和F,但是使用make VERBOSE = 1我发现虽然cmake在E和F之前添加-i并将它们传递给链接,但它还添加了一些额外的标志,例如
-Wl,-rpath,rootdir / E:rootdir / F:
这些额外参数来自哪里?我该如何解决这个问题? 我将不胜感激任何帮助!谢谢!
答案 0 :(得分:2)
“问题”在命令link_directories
中:
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(Boo)
link_directories("/path/to/Foo")
add_executable(boo Boo.cpp)
target_link_libraries(boo "/path/to/Foo/libFoo.a")
> cmake -H. -B_builds -DCMAKE_VERBOSE_MAKEFILE=ON
> cmake --build _builds
/usr/bin/c++ ... -o boo -Wl,-rpath,/.../Foo
如果使用find_library
命令查找Foo
并使用target_link_libraries
标记链接它
将被删除:
> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(Boo)
add_executable(boo Boo.cpp)
find_library(LIBFOO Foo HINTS "/path/to/Foo/")
if(NOT LIBFOO)
message(FATAL_ERROR "Library `Foo` not found in `/path/to/Foo`")
endif()
target_link_libraries(boo ${LIBFOO})
> cmake -H. -B_builds -DCMAKE_VERBOSE_MAKEFILE=ON
> cmake --build _builds
/usr/bin/c++ CMakeFiles/boo.dir/Boo.cpp.o -o boo -rdynamic /path/to/Foo/libFoo.a
如果您没有链接到共享库,AFAIK可以忽略此标志:
请注意,这种情况与库使用要求有关 (您需要链接另一个库以使用您安装的库):
install(EXPORT ...)