cmake--多级目录工程

前言

很多大工程由不同动态库和程序构成,并表现为多级目录和子工程的样式。

一, 目录结构

├── CMakeLists.txt  -------------------->[1]
├── subbinary
│           ├── CMakeLists.txt----------->[2]
│           └── main.cpp
├── sublibrary1
│           ├── CMakeLists.txt------------>[3]
│           ├── include
│           │          └── sublib1
│           │                       └── sublib1.h
│           └── src
│                    └── sublib1.cpp
└── sublibrary2
              ├── CMakeLists.txt------------>[4]
              └── include
                      └── sublib2
                              └── sublib2.h

* link:CMakeLists.txt[] - Top level CMakeLists.txt
* link:subbinary/CMakeLists.txt[] - to make the executable
* link:subbinary/main.cpp[] - source for the executable
* link:sublibrary1/CMakeLists.txt[] - to make a static library
* link:sublibrary1/include/sublib1/sublib1.h[]
* link:sublibrary1/src/sublib2.cpp[]
* link:sublibrary2/CMakeLists.txt[] - to setup header only library
* link:sublibrary2/include/sublib2/sublib2.h[]

二,cmake脚本

├── CMakeLists.txt  -------------------->[1]

cmake_minimum_required (VERSION 3.5)

project(subprojects)

# 添加子目录
add_subdirectory(sublibrary1)
add_subdirectory(sublibrary2)
add_subdirectory(subbinary)

├── CMakeLists.txt----------->[2]

project(subbinary)

# 创建可执行程序
add_executable(${PROJECT_NAME} main.cpp)

#  使用别名 sub::lib1 链接subproject1下的静态库 
# 使用别名 sub::lib2 链接subproject2下的库文件
target_link_libraries(${PROJECT_NAME}
sub::lib1
sub::lib2
)

├── CMakeLists.txt------------>[3]

project (sublibrary1)

# 添加工程源文件到库,设置库别名

add_library(${PROJECT_NAME} src/sublib1.cpp)
add_library(sub::lib1 ALIAS ${PROJECT_NAME})

# 包含相关的头文件

target_include_directories( ${PROJECT_NAME}
PUBLIC ${PROJECT_SOURCE_DIR}/include
)

├── CMakeLists.txt------------>[4]

project (sublibrary2)

add_library(${PROJECT_NAME} INTERFACE)
add_library(sub::lib2 ALIAS ${PROJECT_NAME})

target_include_directories(${PROJECT_NAME}
INTERFACE
${PROJECT_SOURCE_DIR}/include
)

原文地址:https://www.cnblogs.com/svenzhang9527/p/10704777.html

时间: 2024-08-30 13:50:31

cmake--多级目录工程的相关文章

CMAKE设置VS工程中Debug和Release不同的输出名称

CMAKE在管理工程时,需要同时编译Debug和Release版本,但是两个版本输出的文件无论是lib还是dll,名称都是是完全相同. 如果要输出在同一个目录中是非常麻烦的,非常容易混淆,可以使用以下命令设置debug和Release输出文件后缀的方式进行区分: if(WIN32 AND NOT MINGW) if(NOT DEFINED CMAKE_DEBUG_POSTFIX) set(CMAKE_DEBUG_POSTFIX "_debug") endif() if(NOT DEFI

使用CMake构建复杂工程

0. 什么是CMake CMake是一个跨平台的编译.安装.测试以及打包工具:CMake不直接编译软件,而是结合原生构建系统来构建软件.CMake配置文件是CMakeList.txt文件(每个源码文件夹下都要有一个),CMake根据配置文件在生成Unix的Makefile或VS的solution文件等. 1. 为什么选CMake 别人为什么选CMake我不清楚,我是因为在Linux上直接写Makefile太痛苦,而项目又会跨平台,Windows和Linux都要有 2. 用一个简单工程来说明CMa

linux下cmake编译C++工程之总结篇

昨天正式把项目编译完成,经历了一周的摸索和折磨后,最后也想:oh,it's so easy! 但是过程确实困难的,因为cmake官方只有API的解释,而且解释的不是很清楚. 一般项目都是狠复杂的层级关系 这种如何来写cmake呢? 首先要知道一个很重要的东西,cmake是一定要从顶级目录开始,才能继承目录,比如直接在project1目录里用../lib是无效的,因为cmake并不知道: 而如果在project下建立cmakelists.txt 然后add_subdir(project1),pro

asp.net mvc多级目录结构和多级area实现技巧

今天在工作要实现这个多级area.其原因是这个项目需要多级的功能,大的类别里有小的类别,小的类别里有具体的功能项,每一个功能项还有若干动作Action,所以在菜单和mvc工程的结构上都需要有体现多级的元素,菜单是用的accordion,每一个大类就是accordion的一个pane,然后每一个小类就是用一个表格来表示的,每一个功能就是用单元格加一个链接来表示的.在网站目录结构上,area可以很方便地实现一级的目录结构,比如可以有admin, backoffice, logging, busine

将多级目录打包成zip文件

最近接触PHP,需要用到zip压缩,在网上搜索的一大堆,发现代码都不低于50行.  而且调用还很费事(基础太少看不懂).让我收获的是Php提供有一个ZipArchive类,并有如下方法. bool addEmptyDir( string $dirname ) bool addFile ( string $filename [, string$localname = NULL[, int$start = 0 [, int $length = 0 ]]] ) mixed open( string $

php创建多级目录完整封装类操作

创建多级目录函数中调用创建指定下的指定文件的函数: public function create_dir($dir,$mode=0777) { return is_dir($dir) or ($this->create_dir(dirname($dir)) and mkdir($dir, $mode)); } 创建指定路径下的指定文件,string $path(需要包含文件名和后缀),boolean $over_write 是否覆盖文件,int $time 设置时间.默认是当前系统时间,int

Python3 使用基本循环实现多级目录(思路)

一.多级目录设计: 1. 通过循环的方式显示菜单和进入菜单 2. 设置标志位以提供回退上一层菜单 2. 设置标志位以提供退出程序 二.注意要点: 1. 菜单样式,层次关系不要弄混乱 2. 当输入错误时,保留在当前view之下 3. 注意标志位使用之后对其他循环是否有影响,或者需要走其他分支

MVC 多级目录菜单

MVC多级目录菜单  ----- 简单模拟 Model ---- cs { public class Class1 { public int ID{get;set;} public int parentID { get; set; } public int childID { get; set; } public string title { get; set; } } MVC View ---- cshtml: @using WebApplication1.Models; @{ ViewBag

PHP使用mkdir创建多级目录的方法

PHP中使用mkdir()可以创建多级目录,相比之前自己一级一级的创建,这个函数非常好用. 下面是php手册上的函数介绍: bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] ) 返回值为bool类型. 第一个参数:必须,代表要创建的多级目录的路径: 第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权: 第三个参数:true表示