我尝试用cmake学习c ++。我做了一个项目,cmake运行,它编译,它工作,这很好,没关系。现在我开始了一个新项目,我想在其中使用第一个类的一些类。我试图阅读一些源代码,我已经明白我需要创建一个可以从应用程序中读取的模块。所以这将是我的存储库:
/
/cmake
/modules/Network
/software/sw1
/software/sw2
项目sw1
和sw2
都取决于模块Netowrk
。在文件夹cmake中必须有FindNetwork.cmake
文件,在sw1
,sw2
和Network
中必须有CMakeList.txt
。
但是......我搞砸了include_directories
和其他cmake晦涩......
有人能指出我如何使用依赖于常用模块的软件轻松组织存储库吗?
答案 0 :(得分:2)
This link将为您提供一些示例。
就您如何看待项目/基础设施而言,最好不要过多地混淆。所以这里有几点可以让你开始(我希望)
在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,那么当你真正将libs安装到机器上并希望其他人能够找到它时,我会建议你这样做,或者有机制用于链接到彼此库的多个项目。
我希望这有点用处,请注意cmake site有一些例子,cmake --help
是你的朋友。