Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake只接受add_子目录中的“find_package(需要Qt5Widgets)”,而不接受根项目中的“find_package”_C++_Qt_Cmake - Fatal编程技术网

C++ CMake只接受add_子目录中的“find_package(需要Qt5Widgets)”,而不接受根项目中的“find_package”

C++ CMake只接受add_子目录中的“find_package(需要Qt5Widgets)”,而不接受根项目中的“find_package”,c++,qt,cmake,C++,Qt,Cmake,上下文 cmake_minimum_required(VERSION 3.0) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package(Qt5Widgets REQUIRED) include_directories(${Qt5Widgets_INCLUDE_DIRS}) add_definitions(${Qt5Widgets_DEFINITIONS}) set(CMAKE_CXX_FLAGS "${CMA

上下文

cmake_minimum_required(VERSION 3.0)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets REQUIRED)

include_directories(${Qt5Widgets_INCLUDE_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")


# Project name
project ( "TestQt" )
add_executable( UnitTest_TestQt UnitTest.cpp testwidget.cpp)
target_link_libraries(UnitTest_TestQt Qt5::Widgets)
使用下面的
CMakeLists.txt
,它只在包含到父项目中时构建
Qt
测试项目,没有问题,例如:

RootProject
  +--CMakeLists.txt      // Parent CMake
  +--TestQt
       +--testwidget.cpp 
       +--testwidget.hpp // Empty class, just extends QWidget
       +--CMakeLists.txt // My Test Project CMake
父项目仅包含:

add_subdirectory( "TestQt" )
当我尝试独立构建“TestQt”项目时,它只会返回一个错误,如:

CMakeLists.txt:16(find_包)的CMake错误:未提供 此项目要求的cmake_模块_路径中的“FindQt5Widgets.cmake” CMake查找“Qt5Widgets”提供的包配置文件, 但科马克没有找到

找不到“Qt5Widgets”提供的包配置文件 具有以下任一名称:

Qt5WidgetsConfig.cmake/ qt5widgets-config.cmake

将“Qt5Widgets”的安装前缀添加到CMAKE_prefix_路径或 将“Qt5Widgets_DIR”设置为包含上述内容之一的目录 文件夹。如果“Qt5Widgets”提供单独的开发包或 SDK,请确保它已安装

CMAKE_PREFIX_PATH
在这两种情况下都为空

目前使用Debian和稍旧的CMAKE 3.0.2

问题

出了什么问题/遗漏了什么

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets REQUIRED)

include_directories(${Qt5Widgets_INCLUDE_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")


# Project name
project ( "TestQt" )
add_executable( UnitTest_TestQt UnitTest.cpp testwidget.cpp)
target_link_libraries(UnitTest_TestQt Qt5::Widgets)

查找包
需要
项目
才能正常工作。将行
project(“TestQt”)
移动到文件顶部,紧跟在
cmake_minimum_required
之后

find_package
需要
project
才能正常工作。将行
project(“TestQt”)
移动到文件顶部,在
cmake_minimum_required

之后进行搜索以查找FindQt5Widgets.cmake的安装位置,并查看环境变量
CMAKE_PREFIX_PATH
Qt5Widgets_DIR
Qt5Widgets_DIR的精彩内容:
/usr/lib/x86_64-linux-gnu/CMAKE/Qt5Widgets
在子项目中,但在独立项目中
Qt5Widgets_DIR-NOTFOUND
。你知道为什么不在standalone中设置吗?这很令人困惑:你不应该在另一个项目中有一个
项目(“TestQt”)
。据我所知,“只能有一个”项目。它必须在根目录下
CMakeLists.txt
。如果它不在那里,它将被隐式添加。如果在目录层次结构中的其他
CMakeLists.txt
中调用
project()
,则内容会中断。我想这里显示的CMakeLists.txt中还有更多内容。错误显示它发生在第16行,但在您的CMakeLists.txt中,它发生在第6行。尝试使用此小文件并查看错误是否继续发生,然后搜索FindQt5Widgets.cmake的安装位置,并查看环境变量
CMAKE_PREFIX_PATH
Qt5Widgets_DIR
Qt5Widgets_DIR的精彩内容:
/usr/lib/x86_64-linux-gnu/CMAKE/Qt5Widgets
在子项目中,但在独立项目中
Qt5Widgets_DIR-NOTFOUND
。你知道为什么不在standalone中设置吗?这很令人困惑:你不应该在另一个项目中有一个
项目(“TestQt”)
。据我所知,“只能有一个”项目。它必须在根目录下
CMakeLists.txt
。如果它不在那里,它将被隐式添加。如果在目录层次结构中的其他
CMakeLists.txt
中调用
project()
,则内容会中断。我想这里显示的CMakeLists.txt中还有更多内容。错误显示它发生在第16行,但在您的CMakeLists.txt中,它发生在第6行。尝试使用这个小文件,查看错误是否继续发生