gpt4 book ai didi

c++ - 如何配置项目的 CMakeLists.txt 文件以在 Qt Creator 中将项目分开而不是一个项目

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:42 25 4
gpt4 key购买 nike

我有 2 个可执行项目,每个项目都依赖于一个解决方案中的 2 个库(root CMakeLists.txt)。构建没问题,结果我有 2 个库和 2 个可执行文件。但是,当我尝试在 Qt Creator 中打开根 CMakeLists.txt 而不是 4 个项目(src1、src2、subproject1、subproject2)和 CMakeLists.txt结果在根目录中,我只有 1 个名为 "Project" 的项目,其中包括我在 "Project" 容器中的 4 个项目,就像这样包含文件夹。

我也无法选择要运行的项目(Set project "Project"as Active Project),因为这只是一个项目。从 Qt 运行后,运行了 MainProject1

StackOverflow 和谷歌提议为此使用 add_subdirectory 但这不起作用。在我的 CMakeLists 中,make depends 和几个我已经使用过的项目 add_subdirectory

Qt version: 5.7.0.
Qt Creator version: 4.0.2.
Ubuntu

请帮我解决这个问题。提前致谢。

项目结构和手动构建及结果:成功

项目结构:

root
src1 (executable which depends from subproject1 and subproject2)
CMakeLists.txt
main.cpp
src2 (executable which depends from subproject1 and subproject2)
CMakeLists.txt
main.cpp
subproject1 (library)
CMakeLists.txt
hellow.cpp
hellow.h
subproject2 (library)
CMakeLists.txt
hellow.cpp
hellow.h
CMakeLists.txt (the root CMakeLists)

构建并显示结果:

mkdir -p build && cd build && cmake .. && make &&
ll src1/MainProject1 && ll src2/MainProject2 && ll subproject1/libsubproject1.a && ll subproject2/libsubproject2.a

结果:

-rwxrwxr-x 1 qqq qqq 13570 Jun  1 10:45 src1/MainProject1*
-rwxrwxr-x 1 qqq qqq 13570 Jun 1 10:45 src2/MainProject2*
-rw-rw-r-- 1 qqq qqq 2820 Jun 1 10:45 subproject1/libsubproject1.a
-rw-rw-r-- 1 qqq qqq 2828 Jun 1 10:45 subproject2/libsubproject2.a

一切正常

CMakeLists.txt

根CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
add_subdirectory( src1 )
add_subdirectory( src2 )

子项目1/CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(subproject1)

set (sources
./hellow.cpp
./hellow.h
)
add_library(subproject1 STATIC ${sources})

子项目2/CMakeLists.txt

是相同的,但不是 subproject1: subproject2

src1/CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(MainProject1)

set (sources
./main.cpp
)

if (NOT TARGET subproject1)
add_subdirectory( ./../subproject1 "${CMAKE_CURRENT_BINARY_DIR}/../subproject1" )
add_subdirectory( ./../subproject2 "${CMAKE_CURRENT_BINARY_DIR}/../subproject2" )
endif()

add_executable(MainProject1 ${sources})
target_link_libraries (MainProject1 subproject1)
target_link_libraries (MainProject1 subproject2)
add_dependencies( MainProject1 subproject1 )
add_dependencies( MainProject1 subproject2 )

src2/CMakeLists.txt

相同但 MainProject1: MainProject2

在Qt Creator中打开:失败

打开根 CMakeLists.txt 并在构建文件夹中配置构建。

项目结构结果(只有1个项目):

root
Project
CMakeLists.txt
src1
src2
subproject1
subproject2

期望(4 个项目):

root
src1
src2
subproject1
subproject2
CMakeLists.txt

构建结果:

cd build && ll src1/MainProject1 && ll src2/MainProject2 && ll subproject1/libsubproject1.a && ll subproject2/libsubproject2.a

-rwxrwxr-x 1 qqq qqq 38670 Jun 1 11:10 src1/MainProject1*
-rwxrwxr-x 1 qqq qqq 38670 Jun 1 11:10 src2/MainProject2*
-rw-rw-r-- 1 qqq qqq 21900 Jun 1 11:10 subproject1/libsubproject1.a
-rw-rw-r-- 1 qqq qqq 21908 Jun 1 11:10 subproject2/libsubproject2.a

构建没问题。

运行项目

MainProject1 已运行。无法选择要运行的项目,因为 Qt Creator 将根 CMakeLists 视为只有一个项目。

注意事项

Correspound link to question in forum.qt.io

最佳答案

我会按以下方式构建您的项目:

根 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(MyComplexProject)
add_subdirectory( src1 )
add_subdirectory( src2 )
add_subdirectory( subproject1 )
add_subdirectory( subproject2 )

src1/CMakeLists.txt

set (sources
./main.cpp
)

add_executable(MainProject1 ${sources})
target_link_libraries (MainProject1 subproject1 subproject2)

subproject1/CMakeLists.txt

set (sources
./hellow.cpp
./hellow.h
)
add_library(subproject1 STATIC ${sources})

请对src2/CMakeLists.txt和subproject2/CMakeLists.txt进行等价修改。

注意:只有顶级 CMakeLists.txt 包含项目定义。其他 CMakeList 仅包含目标定义。

target_link_libraries 默认添加对 lib 目标的依赖。所以它不需要明确地完成。

通过将带有 target_link_libraries 的依赖项添加到可执行目标,CMake 能够计算出正确的构建顺序。

编辑:

看看是否How to load cmake script with more than one project with Qt Creator进一步帮助您。

关于c++ - 如何配置项目的 CMakeLists.txt 文件以在 Qt Creator 中将项目分开而不是一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com