Linux cmake 初窥【2】

1.开发背景

        基于上一篇的基础上,再次升级

2.开发需求

        基于 cmake 指定源文件目录可以是多个文件夹,多层目录

3.开发环境

        ubuntu 20.04 + cmake-3.23.1

4.实现步骤

4.1 准备源码文件

工程目录如下

顶层脚本 compile.sh 负责执行 cmake 操作,顶层的 CMakeLists.txt 很关键,指定了源文件路径,其中每个文件夹中都放置了一个CMakeLists.txt 文件,语法要求,否者会报错。

顶层 CMakeLists.txt

# Top 顶层 Cmake
cmake_minimum_required(VERSION 2.8.11)

# 添加子路径 cmake 执行调用对应子路径的 cmake
add_subdirectory(./src)
add_subdirectory(./src/func1/)
add_subdirectory(./src/func2/)

# 编译过程打印信息
message("top cmake show message")               # 打印信息
#message(SEND_ERROR "Error Show")       # 打印错误信息 可以显示当前位置行数

# 定义工程名 暂时未见起作用
project(projectName)

# 指定编译工具 X86 还是 ARM
#SET(CMAKE_CXX_COMPILER    arm-linux-gnueabihf-g++)
set(CMAKE_CXX_COMPILER    g++)

# 指定源代码文件目录别称
set(SRC_DIR                             ${PROJECT_SOURCE_DIR}/src)
set(SRC_FUNC1_DIR               ${PROJECT_SOURCE_DIR}/src/func1)
set(SRC_FUNC2_DIR               ${PROJECT_SOURCE_DIR}/src/func2)

# 指定生成的可执行文件名
set(EXE_FILE_NAME               mainFile)

# 添加 include 包含路径 否则在源代码中引用头文件需要指定完整路径
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/src/func1/)
include_directories(${PROJECT_SOURCE_DIR}/src/func2/)

# 添加执行文件 1、多次调用 可以生成多个可执行文件
add_executable(
                                # 生成文件
                                ${EXE_FILE_NAME}

                                # main 函数所在目录
                                ${SRC_DIR}/main.cpp

                                # 测试功能文件夹1
                                ${SRC_FUNC1_DIR}/func1.cpp

                                # 测试功能文件夹2
                                ${SRC_FUNC2_DIR}/func2.cpp
                                )

src CMakeLists.txt

# src Cmake
cmake_minimum_required(VERSION 2.8.11)

# 编译过程打印信息
message("src cmake show message")               # 打印信息

func1 CMakeLists.txt

# func1 Cmake
cmake_minimum_required(VERSION 2.8.11)

# 编译过程打印信息
message("func1 cmake show message")             # 打印信息

func2 CMakeLists.txt

# func2 Cmake
cmake_minimum_required(VERSION 2.8.11)

# 编译过程打印信息
message("func2 cmake show message")             # 打印信息

main.c

#include <stdio.h>

#include "func1.h"
#include "func2.h"

int main(int argc, char* argv[])
{
        printf("%s hello cmake\r\n", __func__);

        /* 外调文件功能 */
        Func1_Test();
        Func2_Test();

        return 0;
}

func 中的函数就是 Func_Test(); 和 Func2_Test(); ,这里就不展示了

4.2 准备编译脚本

compile.sh 文件如下:

#!/bin/bash

echo "compile file"

if [ ! -d "./build/" ]; then

        # 没有文件夹 创建文件夹
        echo "no build direct"
        mkdir build

else

        # 存在文件夹 删除文件夹内容
        echo "already build direct"
        rm ./build/* -r

fi

cmake -B build

4.3 执行编译脚本

./compile.sh

4.4 编译程序

执行 make 

cd build
make 

4.5 运行程序

执行可执行程序

./mainFile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/600866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

类加载器aa

一&#xff0c;关系图及各自管辖范围 &#xff08;不赘述&#xff09; 二&#xff0c;查看关系 package com.jiazai;public class Main {public static void main(String[] args) {ClassLoader appClassLoader ClassLoader.getSystemClassLoader();//默认System.out.println…

赋能企业数字化转型 - 易点易动固定资产系统与飞书实现协同管理

在当前瞬息万变的商业环境下,企业如何借助信息化手段提升管理效率,已经成为摆在各行各业面前的紧迫课题。作为企业数字化转型的重要一环,固定资产管理的信息化建设更是不容忽视。 易点易动作为国内领先的企业资产管理服务商,凭借其全方位的固定资产管理解决方案,助力众多企业实…

SQL注入实例(sqli-labs/less-1)

初始网页 从网页可知传递的参数名为 id&#xff0c;并且为数字类型 1、得知数据表有多少列 1.1 使用联合查询查找列数&#xff08;效率低&#xff09; http://localhost/sqli-labs-master/Less-1/?id1 union select 1,2 -- 1.2 使用order by查找列数&#xff08;效率高&…

重学java 30.API 1.String字符串

于是&#xff0c;虚度的光阴换来了模糊 —— 24.5.8 一、String基础知识以及创建 1.String介绍 1.概述 String类代表字符串 2.特点 a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现 凡是带双引号的&#xff0c;都是String的对象 String s "abc&q…

【JVM】类加载机制及双亲委派模型

目录 一、类加载过程 1. 加载 2. 连接 a. 验证 b. 准备 c. 解析 3. 初始化 二、双亲委派模型 类加载器 双亲委派模型的工作过程 双亲委派模型的优点 一、类加载过程 JVM的类加载机制是JVM在运行时&#xff0c;将 .class 文件加载到内存中并转换为Java类的过程。它…

第8篇:创建Nios II工程之读取Switch的值<一>

Q&#xff1a;本期我们再添加一个PIO组件设为输入&#xff0c;创建Nios II工程读取输入值显示在LED上。 A&#xff1a;在前2期创建的控制LED工程的Platform Designer系统基础上再添加一个PIO核&#xff0c;参数设置为18位和单向输入模式&#xff0c;表示DE2-115开发板上的18个…

rmallox勒索病毒肆虐,如何保护网络安全?

rmallox勒索病毒与网络安全的关系可以从以下几个方面来阐述&#xff1a; 一、rmallox勒索病毒的特性 rmallox勒索病毒是一种极具破坏性的计算机病毒&#xff0c;它具有多个显著特性&#xff0c;这些特性使得该病毒对网络安全构成了严重威胁。具体来说&#xff0c;rmallox病毒具…

六西格玛项目的核心要素:理论学习、实践应用与项目经验

许多朋友担心&#xff0c;没有项目经验是否就意味着无法考取六西格玛证书。针对这一疑问&#xff0c;张驰咨询为大家详细解答。 首先&#xff0c;需要明确的是&#xff0c;六西格玛项目不仅仅是一种管理工具或方法&#xff0c;更是一种追求卓越、持续改进的思维方式。它强调通…

Java反序列化-CC11链

前言 这条链子的主要作用是为了可以在 Commons-Collections 3.2.1 版本中使用&#xff0c;而且还是无数组的方法。这条链子适用于 Shiro550漏洞 CC11链子流程 CC2 CC6的结合体 CC2 这是CC2的流程图&#xff0c;我们取的是后面那三个链子&#xff0c;但是由于CC2 只能在 c…

2024年第九届数维杯数学建模A题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

76.网络游戏逆向分析与漏洞攻防-移动系统分析-分析角色移动产生的数据包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

[开发|安卓] Android Studio 开发环境配置

Android Studio下载 Android Studio下载地址 下载SDK依赖 1.点击左上角菜单 2.选择工具 3.打开SDK管理中心 4.下载项目目标Android版本的SDK 配置安卓虚拟机 1.打开右上角的设备管理 2.选择合适的手机规格 3.下载并选择项目目标Android系统 4.点击完成配置 …

jupyter lab 与jupter notebook 以及anconda环境

jupyter lab 与jupter notebook 以及anconda环境 jupyter lab 与jupter notebook 以及anconda环境方法一之后需要将虚拟环境的包&#xff0c;导入到jupyter lab中方法二 jupyter lab 与jupter notebook 以及anconda环境 #踩坑/深度学习/jupyter&#xff0c;与深度学环境 关于…

python 打包为exe可执行程序

近期因为需要做文字识别&#xff0c;应用ocr 所以每次都需要部署环境&#xff0c;然后打算做成exe&#xff0c;遇到问题做一总结。 pyinstaller -D --hidden-importpaddleocr testflask.py 生成exe paddleocr 和pyinstaller 安装不做说明。 No such file or directory: …

element-plus el-cascader 懒加载实现-省市区街道选择及回显

大概思路&#xff1a; 准备一个接口可以通过父Id,查询到下一级省市区街道的信息&#xff1b;如下方的getRegionListOne确定后端的数据结构&#xff0c;需要在created里边处理数据回显逻辑el-cascader接收的数据格式是[‘’,‘’,‘’];后端的数据格式多为[{provinceId: ‘’, …

Hive Bucketed Tables 分桶表

Hive Bucketed Tables 分桶表 1.分桶表概念 2.分桶规则 3.语法 4.分桶表的创建 5.分桶表的好处

鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位

时间概念太重要了&#xff0c;在鸿蒙内核又是如何管理和使用时间的呢? 时间管理以系统时钟 g_sysClock 为基础&#xff0c;给应用程序提供所有和时间有关的服务。 用户以秒、毫秒为单位计时.操作系统以Tick为单位计时&#xff0c;这个认识很重要. 每秒的tick大小很大程度上决…

set-cookie字段,cookie文件介绍+原理,如何查看cookie文件,在基于http协议服务器的代码实现,cookie存在问题+解决(会话机制)

目录 Set-Cookie 引入 介绍 原理 描述 图解 保存"cookie文件"的方法 内存级 文件级 查看cookie文件 示例 实现 介绍 代码 核心代码 全部代码 示例 cookie存在的问题 介绍 存在的必要性 如何解决 问题梳理 引入 会话机制 -- 解决信息泄漏…

构造照亮世界——快速沃尔什变换 (FWT)

博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换&#xff08;FWT&#xff09;是解决这样一类卷积问题&#xff1a; ci∑ij⊙kajbkc_i\sum_{ij\odot k}a_jb_k ci​ij⊙k∑​aj​bk​其中&#xff0c;⊙\odot⊙ 是位运算的一种。举个例子&#xff0c;给定数列 a,…

【大模型】LLaMA-1 模型介绍

文章目录 一、背景介绍二、模型介绍2.1 模型结构2.2 模型超参数2.3 SwiGLU 三、代码分析3.1 模型结构代码3.2 FairScale库介绍 四、LLaMA家族模型4.1 Alpaca4.2 Vicuna4.3 Koala(考拉)4.4 Baize (白泽)4.5 Luotuo (骆驼&#xff0c;Chinese)4.6 其他 参考资料 LLaMA&#xff08…
最新文章