Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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没有这样的文件或目录_C++_Cmake_Qt5 - Fatal编程技术网

C++ CMake没有这样的文件或目录

C++ CMake没有这样的文件或目录,c++,cmake,qt5,C++,Cmake,Qt5,我在通过cmake构建Qt5项目时遇到问题 我运行命令cmake..&&从目录build生成,我收到以下错误: /usr/bin/ld: cannot find -lengine-lib collect2: error: ld returned 1 exit status make[2]: *** [src/CMakeFiles/blacklist-engine-cli.dir/build.make:102: src/blacklist-engine-cli] Error 1 make[1]:

我在通过cmake构建Qt5项目时遇到问题

我运行命令
cmake..&&从目录
build
生成
,我收到以下错误:

/usr/bin/ld: cannot find -lengine-lib
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/blacklist-engine-cli.dir/build.make:102: src/blacklist-engine-cli] Error 1
make[1]: *** [CMakeFiles/Makefile2:117: src/CMakeFiles/blacklist-engine-cli.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
我已经简单地搜索了这个主题,但是当我在没有使用Qt5Sql的情况下运行这个项目时,仅使用Qt5Core,构建这个项目一点问题也没有。为了构建没有Qt5Sql的项目,我只需删除
db
文件夹,并删除其他CMakeLists.txt文件中引用的行。我的问题是:

如果我只想包含Qt5Core,为什么它可以工作?如果我还包含Qt5Sql,为什么它不工作?包括Qt5Sql在内,我做错了什么?

请不要包括与QtCreator或Qt安装错误相关的答案。我已经检查了我的Qt安装文件夹,并且在同一目录级别上安装了Qt5Core和Qt5Sql

我使用的是Ubuntu20.04,cmake版本3.16.3,Qt版本5.12.8

ls/usr/lib/x86_64-linux-gnu/cmake

Qt5 Qt5核心Qt5Gui Qt5 OpenGL Qt5打印支持Qt5测试Qt5Xml QT5当前Qt5DBus QT5网络Qt5OpenGLExtensions Qt5Sql Qt5Widgets

我的项目中有以下结构:

root
├── CMakeModules
│   └── Qt.cmake
├── build
├── src
│   ├── db
│   │    ├── dbmanager.cpp
│   │    ├── dbmanager.h
│   │    └── CMakeLists.txt
│   ├── engine
│   │    ├── scanner.cpp
│   │    ├── scanner.h
│   │    └── CMakeLists.txt
│   ├── CMakeLists.txt
│   └── main.cpp
└── CMakeLists.txt
CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...
CMakeModules/Qt.cmake

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...
src/CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...
src/main.cpp

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...
src/db/dbmanager.h

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...
src/engine/scanner.h

cmake_minimum_required(VERSION 3.0)

project(blacklist-engine)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)

add_subdirectory(src)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 REQUIRED COMPONENTS Core Sql)
include(Qt)

add_subdirectory(
    db   
    engine
)

add_executable(blacklist-engine-cli main.cpp)

target_link_libraries(
    blacklist-engine-cli
    Qt5::Core
    Qt5::Sql
    engine-lib
    db-lib
)
#include <QtCore>

#include "db/dbmanager.h"
#include "engine/scanner.h"
...
set (db-lib-source
    dbmanager.h
    dbmanager.cpp
)

add_library(db-lib ${db-lib-source})

target_link_libraries(
    db-lib
    Qt5::Sql    
)
#include <QtSql/QSqlDatabase>
...
#include "dbmanager.h"

#include <QtSql/QSqlQuery>
...
set(engine-lib-source
    scanner.h
    scanner.cpp
)

add_library(engine-lib ${engine-lib-source})
#include <QtCore>
...
#include "scanner.h"
...

出现错误的原因是,从未构建
引擎库
,其CMake文件甚至从未处理过。CMake文件中有问题的行是:

add_subdirectory(
    db   
    engine
)
以这种方式使用时,第二个参数将成为与
db
相关的生成内容的二进制目录。因此,您可能会注意到CMake在
src/engine
目录中放置了一些构建工件,这可能不是您想要的

要解决此问题,必须连续调用
add_subdirectory
多次以包含多个子目录

add_subdirectory(db)
add_subdirectory(engine)

难道不是吗?谁否决了这个问题可以向我解释,我问这个问题错在哪里了?很抱歉,我是cmake的初学者,但我想我简单地提出了我的问题,我不明白你为什么要否决这个。。。我已经为这个问题挣扎了两天了。。。关于cmake还有很多其他的话题,只有两行,而且都是经过投票的。。。我不怪你对我投了反对票,只要解释一下我做错了什么以及我如何改进……我不明白你的
CMakeLists.txt
中的
include(Qt)
是为了什么。是否需要添加此包含目录?可能引擎库未成功生成。我不确定此问题被否决的原因。这是一个很好的、有充分记录的问题,表明这个问题已经被研究过了。