此链接将为您提供一些示例。
就您如何看待项目/基础设施而言,最好不要混淆太多。所以这里有几点可以让你开始(我希望)
- 在 c++ 中,模块是一个库(因此将您的网络模块称为库)
- 要包含一个库,您需要链接它并使 头文件可用。
在 cmake 中,这是两个命令target_link_libraries
,include_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 站点有一些示例并且cmake --help
是您的朋友。