CMake无法解析运行时目录路径

时间:2014-03-20 14:47:50

标签: cmake

运行cmake CMakeLists.txt后

我收到以下警告

CMake Warning at src/CMakeLists.txt:32 (add_executable):
  Cannot generate a safe runtime search path for target MMPEditor because
  files in some directories may conflict with libraries in implicit
  directories:

runtime library [libQt5Widgets.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /home/ch/Qt/5.2.1/gcc_64/lib
runtime library [libQt5Core.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /home/ch/Qt/5.2.1/gcc_64/lib
runtime library [libQt5Gui.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /home/ch/Qt/5.2.1/gcc_64/lib
runtime library [libQt5OpenGL.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /home/ch/Qt/5.2.1/gcc_64/lib

可能无法正确找到其中一些库。

一个文件被另一个文件隐藏是什么意思,我怎样才能让CMake确定哪个文件要链接到哪个文件夹?

2 个答案:

答案 0 :(得分:3)

您的系统库与本地自定义构建Qt库存在冲突。这是一个警告,但由于这个原因,您可能无法在应用程序中获得预期的结果。您需要告诉CMake它在CMakeModule中搜索库时应该排除系统路径。来自this documentation

  

如果指定了NO_DEFAULT_PATH,则不会添加其他路径   搜索。

同样在同一文档中,还提到了另一个标记NO_CMAKE_SYSTEM_PATH,它仅包含特定于平台的默认路径。

答案 1 :(得分:1)

如果您正在处理find_library

find_library(LIBRARY_NAME PATHS "/usr/lib/x86_64-linux-gnu" NO_DEFAULT_PATH)其中

  • PATHS代表libs的确切路径
  • NO_DEFAULT_PATH表示,cmake不会搜索其他地方

检查lib的值并包含message(status, ${LIBRARY_NAME})

的路径

如果您正在处理find_package

它比前一个例子复杂一点,但它基本相同。

对于每个包,您必须运行find_package

  1. 创建名称为Find<Packagename>.cmake的文件,e。 G。如果您正在寻找cppunit,则必须创建FindCPPUNIT.cmake

  2. 在该文件中,您必须在包含文件上运行find_path,在lib文件上运行find_library,例如&#34;如果您正在处理find_library&#34;

    find_path(CPPUNIT_INCLUDE_DIR PATHS "/usr/include/x86_64-linux-gnu" NO_DEFAULT_PATH)       
    find_library(CPPUNIT_LIBRARY PATHS "/usr/lib/x86_64-linux-gnu" NO_DEFAULT_PATH)
    

    然后你必须将文件的路径添加到CMAKE_MODULE_PATH