gpt4 book ai didi

c++ - 如何制作 CMake 模块

转载 作者:行者123 更新时间:2023-11-30 04:17:14 25 4
gpt4 key购买 nike

我尝试通过 cmake 学习 C++。我做过一个项目,cmake 运行,它编译,它工作,很好,好的。现在我开始了一个新项目,我想在其中使用第一个项目的一些类。我试图阅读一些源代码,并且我明白我需要制作一个可以从两个应用程序中读取的模块。所以这将是我的存储库:

/
/cmake
/modules/Network
/software/sw1
/software/sw2

项目sw1sw2 都依赖于模块Netowrk。在文件夹 cmake 中必须有 FindNetwork.cmake 文件,在 sw1sw2Network 中有必须是 CMakeList.txt

但是..我搞砸了 include_directories 和其他 cmake 晦涩难懂的东西..

谁能指出我如何使用依赖于公共(public)模块的软件轻松组织存储库的一个很好的概述?

最佳答案

This link将为您提供一些示例。

就您如何看待项目/基础设施而言,最好不要混淆太多。所以这里有几点可以让你开始(我希望)

  • 在 C++ 中,模块是一个库(因此将您的网络模块称为图书馆)
  • 要包含一个库,您需要链接它并且同时制作可用的头文件。

在 cmake 中,这分别是 target_link_librariesinclude_directories 两个命令。

考虑到这一点,项目结构可以是

/Network/include (api here)
/Network/src
/sw1/src
/sw2/src

为您提供一个示例基础 CmakeLists.txt 文件:(放置在项目的根目录中)

cmake_minimum_required(VERSION 2.7) // your choice
project(myproject) // change name
add_subdirectory(Network)
add_subdirectory(sw1)
add_subdirectory(sw2)

在网络目录中你会有这个

add_library(Network net1.cc net2.cc etc.)

在 sw1 目录中

include_dirs(${MYPROJECT_SOURCE_DIR}/Network/include)
link_directories(${MYPROJECT_BINARY_DIR}/Network)
add_executable (sw1prog sw1.cc sw11.cc etc.)
target_link_libraries (sw1prog Network)

在 sw2 目录中

include_dirs(${MYPROJECT_SOURCE_DIR}/Network/include)
link_directories(${MYPROJECT_BINARY_DIR}/Network)
add_executable (sw2prog sw2.cc sw21.cc etc.)
target_link_libraries (sw2prog Network)

这是您可能需要的一个非常简化的版本,它不需要创建 FindXXModule.cmake 文件并引用您隐式创建的库。我认为这对你来说是最好的机制,如果你确实想创建一个 FindXXModule.cmake 那么我建议你将你的库实际安装到机器上并希望其他人能够找到它,或者有一个机制用于多个项目相互链接的库。

我希望这有点用,请记住cmake site有一些例子,cmake --help 是你的 friend 。

关于c++ - 如何制作 CMake 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239680/

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