65.9K
CodeProject 正在变化。 阅读更多。
Home

设置开源工具链

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (12投票s)

2009年6月7日

CPOL

7分钟阅读

viewsIcon

56943

本文分享了我为开发 C++ 应用程序搭建开源工具链的经验。

引言

本文描述了我为编写 C++ 程序而搭建开源工具链所采取的步骤。

在文中,我将展示如何:

  • 设置带有代码高亮功能的文本编辑器
  • 设置构建和编译 C++ 应用程序所需的 Unix 风格环境
  • 设置 C/C++ 编译器
  • 使用 makefile 创建和编译一个 Hello World C++ 程序

背景

前段时间,我决定分享我开发的一个应用程序的源代码。我使用 Microsoft C++、Visual Studio 编写了该程序,并大量使用了 MFC。我发现有一群人愿意提供帮助,但由于他们没有 Microsoft C++,所以无法提供帮助。因此,我开始研究使用专有工具的替代方案,并在这篇文章中分享我的经验。

写这篇文章的第二个原因是,我想写更多关于我发现的其他技术的文章。这篇文章将让人们了解我使用的工具链,以便他们可以阅读后续文章。

遵循本教程的先决条件

为了编写本教程,我从全新安装的 Windows XP 家庭版开始。我实际上为此使用了 VMware 虚拟机。本教程应该适用于大多数 Windows 版本。

下载并安装 Notepad++

Notepad++ 是一款开源文本编辑器,包含标签式浏览和语法高亮等功能。它还可自定义,这将允许我添加菜单项,以便一键编译和运行程序。

请访问 http://sourceforge.net/project/showfiles.php?group_id=95717&package_id=102072 下载最新版本。我下载了 npp.5.4.3.Installer.exe

设置起来很简单,我使用了所有默认设置,所以这里就不赘述步骤了。您可以通过运行应用程序(应该在“程序文件”菜单中)来检查 Notepad++ 是否正常工作。

注意:如果您想了解更多关于 Notepad++ 的信息,请访问其网站:http://notepad-plus.sourceforge.net/uk/site.htm

下载并安装 MinGW

这是实际的编译器工具链。

请使用自动安装程序 http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780 进行安装。

我选择的选项如下:

  1. 下载并安装
  2. 当前版本
  3. 完全初始化(您必须至少安装基本工具、G++ 和 make,但我建议安装所有内容)

对于其他所有选项,我使用默认设置。

下载并安装 MSYS

虽然并非绝对必要,但我使用 MSYS。这是一个适用于 Windows 的最小化 Unix 风格系统 (SYStem),它在 Windows 机器上设置了一个类似 Linux 的环境。我用我的程序下载并使用各种库(压缩库、GTK+、MySQL 库等),而且 make 文件中经常包含 Unix 命令。主要的例子是 make clean 部分,它使用 rm 而不是 del。MinGW 将使这些操作变得更加容易。

访问 http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=24963。您可以选择当前发布部分,它将展开显示当前发布。我下载了 MSYS-1.0.10.exe

我使用了所有默认设置和选项进行安装。

注意:如果您想了解更多关于 MSYS 和 MinGW 的信息,请访问其网站:http://www.mingw.org/

设置环境变量

我们需要将 MinGW 的 bin 目录和 MSYS 的 bin 目录添加到路径中。为此,请前往“控制面板”->“系统”->“高级”选项卡->“环境变量”按钮。在“系统变量”部分下,找到 Path 变量并按“编辑”。将 MinGW 目录添加到末尾。(地址之间用分号分隔,因此我需要在我的系统上添加 ;C:\MinGW\bin;C:\msys\1.0\bin。)

同时,添加一个名为 HOME 的用户变量,并将其值设置为 C:\msys\1.0\home\<>

注意:不要用引号将路径括起来。这会导致 make 找不到目录。(尽管普通 shell 会找到。)

通过运行命令提示符并输入 gcc --help 来检查是否成功。如果出现“命令未找到”错误,则表示路径未正确设置。

设置 C/C++ 编译器

最后,我们准备好将第一个程序组合并编译。点击蓝色 M 图标加载 MSYS。(为方便起见,我通常将其放在快速启动栏中。)请按照以下步骤操作:

注意:您可以从此处复制命令,然后在 MSYS 中按 shift + INS 运行它。

创建代码目录

  • cd /c/
  • mkdir code

为我们的 Hello World 应用程序创建一个目录

  • cd /c/code/
  • mkdir hello_world

创建 C++ 程序

  • "/c/program files/notepad++/notepad++.exe" /c/code/hello_world/main.cpp
  • 粘贴以下代码,然后保存并关闭 Notepad++
#include <iostream>

int main( int argc, char *argv[] )
{
    printf("Hello World\n");
    return 0;
}

复制这段代码时请小心。小于号“<”可能会变成“<”,大于号“>”可能会变成“>”。

别忘了文件末尾的换行符。

创建 Makefile

  • "/c/program files/notepad++/notepad++.exe" /c/code/hello_world/makefile
  • 粘贴以下代码,然后保存并关闭 Notepad++
$(warning Starting Makefile)

CXX=g++

main.exe: main.cpp
    $(CXX) main.cpp -o main.exe

clean: 
    -rm main.exe

通过制作和运行程序来测试设置

  • cd /c/code/hello_world/
  • make
  • ./main.exe

程序运行后,您应该会看到文本“Hello World”出现。

最后,检查清理工作是否正常。

  • cd /c/code/hello_world/
  • make clean

您应该会看到 exe 文件已消失。

在 Notepad++ 中设置编译和运行命令

我们可以设置 Notepad++ 快捷方式。首先,按照以下步骤创建两个批处理文件:

  • "/c/program files/notepad++/notepad++.exe" /c/code/run.bat
  • 粘贴以下代码,然后保存并关闭 Notepad++
:##BATCH to run fron notepad++
c:
cd\
cd %1
make
pause
main.exe
pause
  • "/c/program files/notepad++/notepad++.exe" /c/code/run_clean.bat
  • 粘贴以下代码,然后保存并关闭 Notepad++
:##BATCH to run fron notepad++
c:
cd\
cd %1
make clean
pause

现在,我们可以设置 Notepad++ 来运行这些批处理文件。

  • 加载 Notepad++
  • 按 F5
  • 输入 c:\code\run.bat $(CURRENT_DIRECTORY)
  • 将命令保存为 RUN CODE
  • 按 F5
  • 输入 c:\code\run_clean.bat $(CURRENT_DIRECTORY)
  • 将命令保存为 CLEAN

全部完成 - 那么我们得到了什么?

我们现在已经设置好了一个工具链。目录 c:\code 包含程序,我们可以为新程序创建子目录。每个子目录都需要一个 makefile 和程序文件。makefile 可以根据所需的程序文件进行更改。您可以使用 Notepad++ 进行编辑,并使用“运行代码”菜单选项来制作和运行程序。“运行代码”命令将在 Notepad++ 中当前文件所在的目录中运行 make

这可能看起来很简单,不值得写一篇文章,但我计划写更多文章,需要分享我的系统是如何设置的,以便它们有意义。

使用此方法编写的文章(目前)

关注点

Makefile 笔记

  • 更改 makefile 时,应使用 make clean 选项。通常,make 程序会自动根据文件修改日期检查需要运行哪些命令。当您更改 makefile 时,这将不起作用,因此您可以使用 make clean 选项强制它重新运行。
  • Make 是一个非常强大的构建程序系统。我提供了一个简单的 make 脚本,它可以工作,但 make 脚本也可以更高级。您可以配置 DEBUG 和 RELEASE 版本。我以前让我的编译器工具为我创建 make 文件,但我发现亲手制作它们迫使我学习了大量关于构建过程的知识,现在我能更好地理解构建过程中的错误消息。

反馈

这就是我用来搭建这个工具链的过程。我很有兴趣听取任何尝试遵循这些步骤的人的经验。如果您能帮助我修改说明,使其对其他人更容易理解,那将非常棒。我也很想知道大家对我的工具链设置方式的看法。多学习并改进做事方式总是好的。

历史

  • 2009年6月7日 - 第一版。
© . All rights reserved.