Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake link_directories()引入额外的链接标志_Cmake - Fatal编程技术网

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

Cmake link_directories()引入额外的链接标志,cmake,Cmake,这个问题让我筋疲力尽。。。我花了好几天时间在这上面 我使用目标链接库链接A与B和C 目标链接库(A rootdir/B.lib rootdir/C.lib) 当B需要E和F目录中的其他文件时,我使用 链接目录(rootdir/E rootdir/F) 要包含目录E和F,但使用make VERBOSE=1,我发现虽然在E和F之前有cmake add-I,并将它们传递给链接,但它还添加了一些额外的标志,例如 -Wl,-rpath,rootdir/E:rootdir/F: 这些额外的参数从何而来?我如

这个问题让我筋疲力尽。。。我花了好几天时间在这上面

我使用目标链接库链接A与B和C

目标链接库(A rootdir/B.lib rootdir/C.lib)

当B需要E和F目录中的其他文件时,我使用

链接目录(rootdir/E rootdir/F)

要包含目录E和F,但使用make VERBOSE=1,我发现虽然在E和F之前有cmake add-I,并将它们传递给链接,但它还添加了一些额外的标志,例如

-Wl,-rpath,rootdir/E:rootdir/F:

这些额外的参数从何而来?我如何解决这个问题? 我将感谢任何帮助!谢谢

问题在命令
链接目录中

> 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如果未链接到共享库,则可以忽略此标志:

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

  • 回答有关安装(导出…)的问题

你在链接器标志中设置了什么吗?没有,额外的标志“-Wl,-rpath,rootdir/E:rootdir/F:“是由link_目录()引入的。我不知道-WI做了什么,但我会理解-rpath,因为link_目录()接受相对路径。谢谢你的帮助。我使用link_目录是因为linked library b.lib需要一些其他文件(只是普通文件,而不是library),这些文件几乎都在不同的目录中,如果我使用find_library,我需要编写很多find_library命令。我认为链接库可能需要包括一些其他文件和目录,为什么没有办法满足这个要求是一个常见的要求?当然,有一种方法可以通过link_目录添加包含的目录,但这不是一种可行的方法。我不明白为什么它会传递一些我的链接器无法识别的标志,即使没有额外的标志,在包含的目录之间添加的冒号也无法被我的链接器识别,链接器将报告一个找不到的错误“rootdir/E:rootdir/F“.我真的不明白。。。。。。。我认为link_目录在目录前添加-I并将这些参数传递给linker就足够了…@waitsummer
为什么没有办法满足此要求
请参阅我的使用要求说明,阅读关于
查找包的内容以及我的答案:,我想这正是你的想法need@waitsummer
我不明白为什么它会传递一些链接器无法识别的标志
您使用的是什么操作系统、编译器、cmake版本?我用gcc试用了我的linux-ubuntu,它运行良好,链接器的路径由
分隔,没有错误