link_directories()引入额外的链接标志

时间:2014-01-03 05:44:26

标签: cmake

我对这个问题感到很累...我花了几天时间。

我使用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:

这些额外参数来自哪里?我该如何解决这个问题? 我将不胜感激任何帮助!谢谢!

1 个答案:

答案 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可以忽略此标志:

相关(使用要求)

请注意,这种情况与库使用要求有关 (您需要链接另一个库以使用您安装的库):