江苏省住房和建设部网站中联建设集团股份有限公司网站

张小明 2026/1/17 16:21:15
江苏省住房和建设部网站,中联建设集团股份有限公司网站,山东做网站建设的好公司,seo优化按天扣费Linux系统编程进阶#xff1a;多文件工程管理与CMake实战指南前言#xff1a;从单文件到多文件的挑战正文多文件工程示例项目结构源代码文件传统编译方式及其局限性方式一#xff1a;分步编译方式二#xff1a;直接编译传统方式的痛点Makefile#xff1a;自动化构建的初步…Linux系统编程进阶多文件工程管理与CMake实战指南前言从单文件到多文件的挑战正文多文件工程示例项目结构源代码文件传统编译方式及其局限性方式一分步编译方式二直接编译传统方式的痛点Makefile自动化构建的初步解决方案安装Make工具基础Makefile示例智能Makefile自动文件发现Makefile核心语法解析CMake现代项目的构建解决方案为什么选择CMakeCMake环境搭建下载和安装CMake常见问题解决CMake实战构建多文件工程基础CMakeLists.txt改进版自动发现源文件完整的构建流程工作流对比总结前言从单文件到多文件的挑战当我们从简单的Hello World程序进阶到实际项目时很快就会遇到多文件管理的问题。想象一下一个项目有几十甚至上百个源文件如何高效地管理和编译它们今天我们就来深入探讨这个问题。演示环境使用vscodesshubuntu2204环境搭建可参考上篇文章https://mp.weixin.qq.com/s/b0Fz-vPzZ4J82dpPAcOfWw正文多文件工程示例让我们从一个简单的多文件项目开始包含以下文件项目结构textproject/ ├── main.c ├── utils.c └── utils.h源代码文件main.cc#include stdio.h #include utils.h int main() { print_message(); return 0; }utils.cc#include stdio.h #include utils.h void print_message() { printf(Hello, World!\n); }utils.hc#ifndef UTILS_H #define UTILS_H void print_message(); #endif传统编译方式及其局限性方式一分步编译bash# 编译 main.c 生成 main.o gcc -c main.c -o main.o # 编译 utils.c 生成 utils.o gcc -c utils.c -o utils.o # 链接对象文件生成可执行文件 gcc main.o utils.o -o hello方式二直接编译bashgcc main.c utils.c -o hello传统方式的痛点问题场景想象一个拥有1000个源文件的大型项目每次修改一个文件都需要重新编译所有文件编译时间从几分钟变成几小时容易遗漏依赖关系导致编译错误命令行变得极其复杂难以维护Makefile自动化构建的初步解决方案该方案了解即可实际会用到下文的cmake安装Make工具bashsudo apt install make基础Makefile示例makefileCC gcc OBJS main.o utils.o hello: $(OBJS) $(CC) $(OBJS) -o hello main.o: main.c $(CC) -c main.c -o main.o utils.o: utils.c utils.h $(CC) -c utils.c -o utils.o clean: rm -f $(OBJS) hello智能Makefile自动文件发现makefileCC gcc SRCS $(wildcard *.c) # 自动发现所有.c文件 OBJS $(SRCS:.c.o) # 将.c文件列表转换为.o文件列表 hello: $(OBJS) $(CC) $^ -o $ %.o: %.c $(CC) -c $ -o $ clean: rm -f $(OBJS) helloMakefile核心语法解析符号含义示例$目标文件hello$第一个依赖文件main.c$^所有依赖文件main.o utils.o$?比目标更新的依赖文件修改过的文件%.o通配符匹配所有.o文件main.o utils.o使用方式bashmake # 编译项目 make clean # 清理生成的文件CMake现代项目的构建解决方案为什么选择CMakeMakefile的局限性语法复杂难懂可读性和维护性差错误诊断困难跨平台支持有限CMake的优势语法简洁直观 强大的跨平台支持自动依赖管理丰富的生态系统更好的可维护性CMake环境搭建下载和安装CMake本文使用cmake3.15版本Ubuntu2204作为演示:下面命令行下载如果太慢或者下载失败可使用网盘下载 https://pan.baidu.com/s/17EcN_57zwG8vDtPLGx0I8g?pwdt74k 提取码: t74k另外之所以不用包管理器直接安装比如sudo apt install cmake是因为此命令安装的版本很旧编译时可能会出问题bash# 下载CMake wget https://cmake.org/files/v3.15/cmake-3.15.3-Linux-x86_64.tar.gz # 解压 tar -xzvf cmake-3.15.3-Linux-x86_64.tar.gz -C /home/hutter/work/ # 配置环境变量 echo export PATH/home/hutter/work/cmake-3.15.3-Linux-x86_64/bin:$PATH ~/.bashrc source ~/.bashrc # 验证安装 cmake --version注意上面的本地路径要换成自己的文件路径常见问题解决bash# 问题1找不到make sudo apt install make # 问题2找不到C编译器 sudo apt install gCMake实战构建多文件工程基础CMakeLists.txtcmake# 指定CMake最低版本 cmake_minimum_required(VERSION 3.1.5) # 定义项目名称和语言 project(hello C) # 添加可执行文件 add_executable(hello main.c utils.c)改进版自动发现源文件cmakecmake_minimum_required(VERSION 3.1.5) project(hello C) # 自动发现当前目录所有源文件 aux_source_directory(. SRCS) # 生成可执行文件 add_executable(hello ${SRCS})上面两种二选一即可完整的构建流程bash# 1. 创建构建目录推荐做法 mkdir build cd build # 2. 生成Makefile cmake .. # 3. 编译项目 make # 4. 运行程序 ./hello对于更复杂的项目推荐这样的结构textmy_project/ ├── CMakeLists.txt ├── include/ │ └── utils.h ├── src/ │ ├── main.c │ └── utils.c └── build/ # 编译输出目录工作流对比阶段手动编译MakefileCMake添加新文件修改编译命令修改Makefile自动发现或简单添加编译输入复杂命令makecmake make清理手动删除文件make cleanmake clean跨平台需要重写命令需要调整自动适配总结核心要点回顾多文件工程需要自动化构建工具Makefile解决了基础自动化问题但语法复杂CMake提供了更现代、更易维护的解决方案掌握CMakeLists.txt的基本语法就足够应对大多数项目实用建议对于新项目直接使用CMake不需要死记语法用时查阅文档即可保持构建系统的简洁性充分利用CMake的自动发现功能
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站后期的维护管理广告推广平台

如何快速使用小米MiMo-Audio-7B音频大模型完整指南 【免费下载链接】MiMo-Audio-7B-Base 项目地址: https://ai.gitcode.com/hf_mirrors/XiaomiMiMo/MiMo-Audio-7B-Base 小米MiMo-Audio-7B是一款革命性的开源音频大模型,在音频理解领域以64.5%的准确率刷新国…

张小明 2026/1/9 20:37:28 网站建设

手机电商网站模板电商网站模板下载

专业级B站视频下载解决方案:bilidown工具深度解析 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具,支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析,可扫码登录,常驻托盘。 项目地址: https://gitcode.com/gh_mirrors/…

张小明 2026/1/12 0:31:46 网站建设

深圳的网站做界面网站用什么语言

DeTikZify完整教程:3步实现科研图表智能化 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 科研工作者们是否曾经为制作LaTeX图表而苦恼…

张小明 2026/1/8 2:02:28 网站建设

青岛网站建设推广公司哪家好wordpress投稿收费吗

智能体记忆持久化方案:将Anything-LLM作为向量记忆库 在构建真正具备“类人思维”的AI智能体时,一个核心挑战浮出水面:如何让模型记住过去?大语言模型(LLM)虽然在推理和生成上表现出色,但它们的…

张小明 2026/1/9 9:23:51 网站建设

上海自助模板建站做logo的网站

WorkshopDL:跨平台Steam创意工坊模组下载解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊而烦恼?WorkshopDL为你打…

张小明 2026/1/17 7:30:05 网站建设

wordpress搬家全站 404邀人做任务比较好的发布网站

目录已开发项目效果实现截图关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发…

张小明 2026/1/17 14:02:31 网站建设