没有规则来制作目标/usr/lib/someLib.so

Dou*_*oug 11 cmake

构建用于在buntu 11.04中工作,现在在12.04中没有.

与位置有冲突someLib.so.也就是说,它正在寻找错误的位置. /usr/lib/here/someLib.so是正确的位置.

当我在ccmake中运行'c'配置cmd时,它注意到了冲突,一次.现在ccmake不再抱怨,但错误依然存在. runtime library [someLib.so] in /usr/lib may be hidden by files in: /usr/lib/here

CMakeLists.txt中导致构建错误的行是:

ADD_EXECUTABLE(test main.cpp)
TARGET_LINK_LIBRARIES(test moreStuff evenMoreStuff)
Run Code Online (Sandbox Code Playgroud)

我在build.make文件中看到了问题.这是由ccmake生成的.我想不通的地方ccmake越来越的想法,someLib.so是在/usr/lib/的,而不是@ /usr/lib/here/.我认为这将是一个SET()声明.我找不到它.

1)什么是配置文件(ccmake'c'cmd)?它会在哪里(同一个目录?)?我想如果我去它,我将能够再次看到错误.(更改CMakeFile.txt似乎没有这样做.)
2)如何找出someLib.so设置位置的位置?(我在找什么?)

我讨厌CCMAKE.谢谢

Dom*_*kar 1

我想说这是 find_library 调用之一的问题。如果我没记错的话,当您的环境指向两个不同的位置并且都包含同名的库文件时,就会发生这种情况。

您可以通过更改环境来防止这种情况发生,以便它不会指向两个位置,或者使用 NO_*_PATH 之一与 find_library 调用来防止 cmake 查找这两个位置(例如,您可以为此 find_library 定义自己的路径并使用 NO_DEFAULT_PATH 阻止 cmake 使用环境路径 - 请参阅文档:http ://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:find_library )

find_library(someLib_location 命名 someLib 路径 /usr/lib/here/ NO_DEFAULT_PATH)

关于1)我认为它们被称为CMakeCache文件,但最安全的方法是简单地删除整个构建结构(如果您是从源代码构建的,这不是问题)

关于2)我会按库名称搜索CMakeList.txt文件(没有.so后缀和lib前缀,因为它们可能是由CMAKE_FIND_LIBRARY_PREFIXES和CMAKE_FIND_LIBRARY_SUFFIXES变量添加的)

  • someLib.so 只存在于一个地方。有一些东西告诉 CMAKE 它错误地存在于 /usr/lib 中。CMAKE从哪里获取它的环境数据?有没有一些 CMAKE 命令可以做到这一点?env 中没有任何内容可以设置它。我还需要检查其他系统环境文件/设置吗?谢谢 (2认同)