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确定哪个文件夹是正确的链接?
您的系统库与您的本地自定义生成Qt库冲突。 它是一个警告,但由于此原因,您的应用程序中可能无法获得预期的结果。 您需要告诉CMake,它应该在搜索CMakeModule中的库时排除系统路径。 从这个文档
如果指定了NO_DEFAULT_PATH,则不会将其他路径添加到搜索中。
同样在相同的文档中,还提到了另外一个标志NO_CMAKE_SYSTEM_PATH
,它只包含特定于平台的默认路径。
如果你正在处理find_library
find_library(LIBRARY_NAME PATHS "/usr/lib/x86_64-linux-gnu" NO_DEFAULT_PATH)
where
PATHS
代表库的确切路径 NO_DEFAULT_PATH
表示cmake不会在其他地方搜索 检查lib的值并包含带有message(status, ${LIBRARY_NAME})
路径message(status, ${LIBRARY_NAME})
如果你正在处理find_package
:
这比前面的例子稍微复杂一点,但它本质上是一样的。
对于每个软件包,您必须运行find_package
:
使用名称Find<Packagename>.cmake
创建文件,例如,如果您正在寻找cppunit,则必须创建FindCPPUNIT.cmake
。
在该文件中,你必须运行find_path
上包括文件和find_library
上LIB文件,就像“如果你正在处理find_library
”。
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
。