我找到了关于如何使用 CMake 在 Qt 中查找可执行文件的一个很好的答案,cmake 找不到 Qt4
如何使用 CMAKE_INCLUDE_PATH?我尝试了一下,但出现错误:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake_modules)
project(vrvu)
find_package(OpenGL REQUIRED)(CMAKE_INCLUDE_PATH <--- this is where I'm getting an error
C:\QtSDK\Desktop\Qt\4.8.0\msvc2010\bin)find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})
find_package(Coin3 REQUIRED)
find_package(Quarter REQUIRED)
add_subdirectory(bullet-2.77)
add_subdirectory(starlight)
file(GLOB SOURCES "*.cpp" "*.cxx" "*.h" "*.hpp")
include_directories(${OPENGL_INCLUDE_DIR} ${QT_INCLUDE_DIR} ${COIN_INCLUDE_DIR} ${QUARTER_INCLUDE_DIR} "./bullet-2.77/src" "./starlight")
link_directories(${QT_LIB_DIR} ${COIN_LINK_DIRECTORIES} ${QUARTER_LINK_DIRECTORIES})
add_definitions(${QT_DEFINITIONS} ${COIN_DEFINITIONS} ${QUARTER_DEFINITIONS})
add_executable(vrvu ${SOURCES})
target_link_libraries(vrvu ${OPENGL_LIBRARIES} ${QT_LIBRARIES} ${COIN_LIBRARIES} ${QUARTER_LIBRARIES} LinearMath BulletCollision starlight)
Run Code Online (Sandbox Code Playgroud)
抱歉代码很长...谢谢!
这里有几个问题。
我不确定这是否只是一个拼写错误,但您不能只将要设置的指令附加CMAKE_INCLUDE_PATH到命令末尾find_package,您需要一个单独的set命令:
find_package(OpenGL REQUIRED)
set(CMAKE_INCLUDE_PATH "C:\\QtSDK\\Desktop\\Qt\\4.8.0\\msvc2010\\bin")
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用反斜杠,则指定的路径需要对分隔符进行转义。或者,即使在 Windows 上,您也可以使用单个正斜杠代替双反斜杠。在这种情况下,将路径放在引号中没有任何效果,但在路径包含空格的情况下,这是一个好习惯。
设置扩展了 CMake 在执行和调用CMAKE_INCLUDE_PATH时尝试的路径列表。这对于调用很有用,但在这种情况下更重要的是设置扩展所有命令的搜索路径。这确实意味着您需要从路径中删除“\bin”,因为在搜索可执行文件时它会附加到:find_pathfind_filefind_packageCMAKE_PREFIX_PATHfind_XXXCMAKE_PREFIX_PATH
set(CMAKE_PREFIX_PATH "C:\\QtSDK\\Desktop\\Qt\\4.8.0\\msvc2010")
Run Code Online (Sandbox Code Playgroud)
下一个,file(GLOB SOURCES "*.cpp" "*.cxx" "*.h" "*.hpp")。虽然这实际上并不是一个错误,但通常不赞成使用此技术创建源文件列表,因为如果将文件添加到源树或从源树中删除,CMake 将没有“知识”并且不会重新创建跑步。推荐的方法是手动将每个源文件添加到 CMakeLists.txt 中,这样添加或删除就会自动导致 CMake 重新运行。
此外,“ SOURCES”也是一个糟糕的变量名称选择,因为它还代表 CMake 目标的属性。
另一种令人不悦的做法是使用link_directories. 文档指出了为什么通常不需要它,这里应该是这种情况。
这add_definitions条线也可能是不必要的。Qt 确实定义了定义,但是当您这样做时它们已经被添加了include(${QT_USE_FILE})(请参阅FindQt4 的文档),因此您在此处添加它们两次。我不熟悉 Coin3 或 Quarter,但它们实际上可能不会生成任何所需的预处理器定义。您可以通过添加以下内容来检查其内容:
message("COIN_DEFINITIONS: ${COIN_DEFINITIONS}")
message("QUARTER_DEFINITIONS: ${QUARTER_DEFINITIONS}")
Run Code Online (Sandbox Code Playgroud)
暂时(在相应的find_package调用之后)。如果这些为空,您可以删除add_definitions呼叫。
假设变量${COIN_LIBRARIES}并${QUARTER_LIBRARIES}指定了这些库的完整路径,那么我认为您应该可以开始了。
| 归档时间: |
|
| 查看次数: |
10033 次 |
| 最近记录: |