运行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确定哪个文件要链接到哪个文件夹?
答案 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
:
创建名称为Find<Packagename>.cmake
的文件,e。 G。如果您正在寻找cppunit,则必须创建FindCPPUNIT.cmake
。
在该文件中,您必须在包含文件上运行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
。