<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>项目结构 on 鹿鸣青野的blog</title><link>https://www.sylgalaxy.xyz/tags/%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84/</link><description>Recent content in 项目结构 on 鹿鸣青野的blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 13 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.sylgalaxy.xyz/tags/%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ 项目约定：目录结构、依赖管理、构建与 Git</title><link>https://www.sylgalaxy.xyz/posts/env-project-convention/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://www.sylgalaxy.xyz/posts/env-project-convention/</guid><description>&lt;p&gt;所谓「约定」= 一套&lt;strong&gt;项目结构规范 + 依赖管理规范&lt;/strong&gt;：以后不管做什么项目，都按这个套路来，不用每次重新想。&lt;/p&gt;
&lt;p&gt;适用背景：&lt;strong&gt;Windows（VS2022）只做 Boost + OpenCV，不做 Qt；Qt 开发放在 Linux（Ubuntu 虚拟机/服务器）&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;文中 &lt;code&gt;&amp;lt;OpenCV安装目录&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;Boost根目录&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;项目根目录&amp;gt;&lt;/code&gt; 为占位符，替换成本机实际目录即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一总体原则"&gt;一、总体原则&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;三句话：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CMake 是唯一的构建系统&lt;/strong&gt;，不碰 qmake、不碰手动 &lt;code&gt;.vcxproj&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;依赖一律走环境变量 + &lt;code&gt;find_package&lt;/code&gt;&lt;/strong&gt;，不在 &lt;code&gt;CMakeLists.txt&lt;/code&gt; 里硬编码路径。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows 端 IDE 是 VS2022 + CMake 项目模式&lt;/strong&gt;；Linux 端用 Qt Creator 或 VS Code。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="二目录结构约定windows-端"&gt;二、目录结构约定（Windows 端）&lt;/h2&gt;
&lt;p&gt;每个项目固定长这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;项目根目录&amp;gt;\&amp;lt;项目名&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── CMakeLists.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── CMakePresets.json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── CMakeUserPresets.json # 本地预设（不提交 Git）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── src\ # 源码
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── main.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── core\ # Boost 业务逻辑
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── Service.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── Service.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── vision\ # OpenCV 图像处理
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── ImageProcessor.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── ImageProcessor.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── include\ # 对外头文件（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── resources\ # 静态资源、图片（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── tests\ # 测试代码（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── third_party\ # 第三方源码（可选，一般不用）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── out\ # 构建输出（不提交 Git）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── build\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── debug\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── release\
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;关键点：&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>