shell 自动生成 CMakeLists.txt 自动编译c语言

简介: 自动生成 cmake

#!/bin/bash
# 自动化编译 c/c++

dir=`pwd` ; echo "欢迎使用自动化汇编程序,当前路径为: $dir"


touchCMake(){

sudo touch CMakeLists.txt ; sudo chmod 777 CMakeLists.txt ;

echo "
project(eisc)
#项目名
cmake_minimum_required(VERSION 3.10)
# 编译要求:cmake 要大于最低版本 3.1 
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# 设置编译器, 如果没有配置环境变量,可以改为gcc具体文件路径

include_directories(a)
include_directories(a)
include_directories(a)
# 添加 头文件搜索路径 (mysql.h 搜索路径)

#add_executable("xx" xx.c )
add_executable("xunhuan" xunhuan.c )
# 生成可执行文件: 将 test.cpp 编译成 test.exe 可执行文件

# rm -rf ./build ; cmake ./ -Bbuild -G "Unix Makefiles" ; cmake --build build
# rm -rf ./build ; cmake ./ -Bbuild ; cmake --build build
# 编译到当前目录下的 build 文件夹
# 也可以不用指定 -G
" > CMakeLists.txt 

# 如果 echo 字符串中有 变量,需要加反斜线转义

}


autoINCPath(){
    incList[0]="include_directories($dir/include/inc/)"
    incList[1]="include_directories($dir/include/src/)"
    incList[2]="include_directories($dir/include/)"
    # 路径为绝对路径,相对路径会报错.  此数组个数与 CMakeLists.txt 中的  include_directories 个数对应

    file="CMakeLists.txt"
    incNumber=`cat -n $file | grep -w include_directories | wc -l`     # wc -l 计算个数

    if [ "${#incList[*]}" != "$incNumber" ]
    then 
        echo "$file 文件 include_directories 定义个数 ${#incList[*]} 与 $incNumber 目标修改个数不相等,无法对应修改。"
        echo "请在 touchCMake 和 autoINCPath 函数, 增加或者 删除 include_directories 关键字个数,以达到与目标修改个数一致。然后重新执行脚本"
        exit
    else

        incI=0;
        while :
        do
            incNumberList=(`cat -n $file | grep -w include_directories  | grep -v okset| awk -F" " '{print $1}' `) 
            Number=${#incNumberList[*]}
            NR=${incNumberList[0]}

            if [ "$Number" -lt "1" ]
            then 
                echo "[ok] 当前绝对路径已经全部修正, 正在执行 CMakeLists.txt 自动化编译。 "
                break
            fi

            echo "[runing] 当前游标:$incI 当前修改行:$NR  当前剩余总修改次数: $Number 文件:$file 所有行:${incNumberList[*]} 目标内容:${incList[$incI]} "

            sed -i "$NR a ${incList[$incI]}   # [eisc.cn_okset]" $file
            sed -i "$NR d " $file
            # 始终修改第一个元素,然后由于循环再去查找行号
            # 错误方式,删除一行后,其他内容行号会变,因此每次删除,需要重新扫描行号
            #  [okset]  修改了的地方做标记

            let "incI++"
            # 先获取 0 后,再自动增加。而不是 先增加: 0+1 第一次为 1 
            sleep 0.3
        done

        sleep 2
    fi

}

touchCMake ; autoINCPath
rm -rf ./build ; cmake ./ -Bbuild ; cmake --build build 

./build/xunhuan
目录
相关文章
|
1月前
|
Ubuntu C语言
在Ubuntu下使用makefile编译C语言工程
在Ubuntu下使用makefile编译C语言工程
|
2月前
|
存储 自然语言处理 编译器
C语言从入门到实战——编译和链接
在C语言中,编译和链接是将源代码转换为可执行文件的两个主要步骤。 编译过程包括以下步骤: 1. 预处理:将源代码中的预处理指令(如`#include`和`#define`)替换为实际的代码。 2. 编译:将预处理后的代码转换为汇编语言。 3. 汇编:将汇编语言转换为机器码指令。 链接过程包括以下步骤: 1. 目标文件生成:将每个源文件编译后生成的目标文件(`.o`或`.obj`)进行合并,生成一个总的目标文件。 2. 符号解析:查找并解析目标文件中的所有符号(例如全局变量和函数名),以确保每个符号都有一个唯一的地址。 3. 地址重定位:根据符号表中符号的地址信息,将目标文件中的所有地址引用
42 0
|
2月前
|
机器学习/深度学习 人工智能 算法
21.C语言:if语句编译选择结构举例
21.C语言:if语句编译选择结构举例
13 0
|
5月前
|
存储 自然语言处理 编译器
C语言编译和链接
ANSI C(American National Standards Institute C)是指按照美国国家标准协会(ANSI)定的C语言标准。在1989年,ANSI制定了一套C语言标准,该标准通常被称为ANSI C或C89(为了区别于后续的标准C99)。ANSI C标准被国际标准化组织(ISO)接受,并以ISO/IEC 9899:1990的形式发布。所以,ANSI C和ISO C代表的是同一种标准。
|
9天前
|
存储 自然语言处理 编译器
C语言:编译和链接(从.c文件到输出结果的过程)
C语言:编译和链接(从.c文件到输出结果的过程)
|
25天前
|
存储 自然语言处理 编译器
编译和链接---C语言
编译和链接---C语言
|
27天前
|
存储 自然语言处理 编译器
【C语言】编译和链接深度剖析
【C语言】编译和链接深度剖析
|
1月前
|
Linux 开发工具 C语言
C语言编译过程、VIM常用命令
C语言编译过程、VIM常用命令
|
2月前
|
存储 机器学习/深度学习 自然语言处理
【进阶C语言】编译与链接、预处理符号详解
【进阶C语言】编译与链接、预处理符号详解
26 0
|
2月前
|
编译器 Linux C语言
程序环境和预处理(含C语言程序的编译+链接)--2
程序环境和预处理(含C语言程序的编译+链接)--2
30 5