gpt4 book ai didi

c++ - CMake - 模块 + 库混淆

转载 作者:太空狗 更新时间:2023-10-29 22:55:13 25 4
gpt4 key购买 nike

我开始了一个新的 c++ 项目,我对 CMake 的所有功能感到困惑。我试图通过查看示例和 CMake 教程来更好地理解

我应该创建一个包含以下内容的新项目:

  1. :它包含一些将被以下模块(例如 vector 、矩阵、图像等)使用的常用类。

    <
  2. Module( future 可能超过 1 个):它包含一些特定于模块的类(例如,分类器、估计器等)和一个 main。

我建议的文件夹结构如下:

|-- Root Project
|-- CMakeLists.txt
|
|-- Library
| |-- CMakeLists.txt
| |-- include
| | |-- CMakeLists.txt (?)
| | `-- Lib_Class.h
| `-- src
| |-- CMakeLists.txt (?)
| `-- Lib_Class.h
|
|-- Application 1
| |-- CMakeLists.txt
| |-- include
| | |-- CMakeLists.txt (?)
| | `-- Method.h
| `-- src
| |-- CMakeLists.txt (?)
| |-- Method.cpp
| `-- main.cpp
|
|-- Application 2
| |-- CMakeLists.txt
| |
`

当我必须将代码实际添加到不同的 CMakeLists.txt 文件时,问题就出现了。根据我的推理,我会:

  • Root/CMakeLists.txt:用于创建项目并添加库和模块的子目录。
  • Library/CMakeLists.txt:这会创建包含 header (来自 include 文件夹)和源文件(来自 src 文件夹)文件的库.
  • Module/CMakeLists.txt:这使用 中的库和带有头文件的模块特定类从 src/main.cpp 文件创建可执行文件>include 文件夹和 src 文件夹中的源文件。

我有两个问题:

首先,我还在其他回复中找到了解决方案,其中包含 Library/srcModule/src 文件夹中的 CMakeLists.txt 文件。但我真的不明白如何使用它们以及在其中写入什么,因为我只会使用父文件夹中的 CMakeLists.txt 文件。

其次,如果我想链接一个外部库(例如,OpenCV 或 dlib),我应该在模块和库中单独链接它,还是应该在根 CMakeLists.txt 文件(前提是到处都用到库)?

我真的需要一些帮助来尝试理解 CMAKE。有人可以解释一下,或者请指导我阅读有关此主题的合适教程。


Matthieu,非常感谢你的帮助。根据您提供给我的解释,我得出了以下 CMakeLists.txt 文件:

根/CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Project_Name)

add_subdirectory(Library)
add_subdirectory(Application)

库/CMakeLists.txt

project(Library)

set(LIB_HEADERS
include/Lib_Class.h
)

set(LIB_SOURCES
src/Lib_Class.cpp
)

add_library(Library_Name SHARED ${LIB_SOURCES} ${LIB_HEADERS})

应用程序/CMakeLists.txt

project(Application)

set(APP_HEADERS
include/Method.h
)

set(APP_SOURCES
src/Method.cpp
src/main.cpp
)

add_executable(Application_Name ${APP_SOURCES} ${APP_HEADERS})
target_link_libraries(Application_Name Library_Name)

现在一切似乎都工作好了!再次感谢您,再次抱歉让您感到困惑!

最佳答案

根 cmakelists 应该设置所有变量,检查编译器支持和库存在。

然后您转到每个子文件夹并根据源代码和检测到的库创建库和可执行文件。您还应该在那里设置所有链接库。

然后 cmake 会弄清楚什么取决于什么。

关于c++ - CMake - 模块 + 库混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52891133/

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