使用 Makefile.am/Makefile.in 在 Ubuntu Linux 中构建 c++ 项目

Posted

技术标签:

【中文标题】使用 Makefile.am/Makefile.in 在 Ubuntu Linux 中构建 c++ 项目【英文标题】:Building c++ project in Ubuntu Linux with Makefile.am/Makefile.in 【发布时间】:2012-05-10 17:10:05 【问题描述】:

我是 Ubuntu/Linux 的新手,我一直在使用 NetBeans IDE 使用 java,所以我在构建 c++ 项目方面没有太多经验。但现在我必须提供概念证明,并且需要将 C++ 客户端与我的 ActiveMQ 服务器连接起来。我从this link 下载了 ActiveMQ-CPP API,但我无法构建/运行它。

下载附带文件:Maklefile.am 和 Makefile.in。我搜索了它,发现我需要 automake/autoconf 来构建它。我尝试运行 ./configure 但它说找不到这样的文件或目录。我试过了

sudo apt-get update
sudo apt-get install automake
sudo apt-get install autoconf

以及我在 Internet 上找到的许多其他命令。然后都没有工作。我知道这个问题真的很基本,似乎已经在其他地方得到了回答,但我所做的每一次尝试都失败了。我想我错过了一些东西。我什至尝试了this topic 中最后一条消息中提供的解决方案,但也没有用。

谁能帮我安装 autoconf/automake,或者告诉我如何使用 Makefile.am / Makefile.in 来构建我下载的项目,甚至建议我用其他方式构建它?

【问题讨论】:

您链接的网站上的版本包括configure 脚本,所以我不知道为什么您会收到一个找不到文件的错误。你是从他们的 svn 下载的吗? cd 到正确的文件夹了吗? 【参考方案1】:

由于您对构建项目的其他方法持开放态度,因此我建议您使用 CMake。这是一个远远比 autotools 更好的构建系统(至少从我的立场来看)。

#CMakeLists.txt
project(MyProject CXX)
set_minimum_required(VERSION 2.8)
add_executable(foobar foo.cpp bar.cpp)

该示例将通过编译和链接 foo.cpp 和 bar.cpp 来构建一个名为“foobar”的可执行文件。将上面的代码放在一个名为 CMakeLists.txt 的文件中,然后运行以下命令:

cmake <path to project> #run in the folder you want to build in
make #this does the actual work

CMake 真正酷的地方在于它生成了一个构建系统(默认为 Makefiles),但您可以使用它为 Eclipse、Visual Studio 解决方案和其他一些东西生成项目文件。如果您想了解更多信息,我会查看their documentation。

【讨论】:

【参考方案2】:

“配置”脚本应该在您的 ActiveMQ-cpp 源目录中。从 Linux 命令行,您应该能够:

1) "cd" 进入您的 ActiveMQ* 目录

2)“ls -l”查看“配置”脚本

3) "./configure" 为构建库进行设置\

4) “make” 来实际构建库

【讨论】:

问题是我没有看到配置文件。Here is the screen captured. 在link above 下载的.gz 文件中没有配置脚本,或者我看不到它。另外,我认为我没有安装 automake 并且我在安装它时遇到了问题,所以即使我有配置脚本我也不知道它是否可以工作 @DanielDuarteFigueiredo:您位于项目的子目录之一中。向上移动 2 个级别,cd ../.. & 在那里你会找到 configure 脚本。它还有README.txt,其中有关于如何构建它的说明 @Daniel Duarte Figueiredo:试试这个:cd ~/Downloads/activemq-cpp-library-3.4.2,然后是./configure【参考方案3】:

这在 cmets 中有所提及,但这种特殊的混淆点已经普遍存在了十多年,我认为需要尽可能多地澄清。 您不需要安装 autoconf 或 automake 来构建使用这些工具的项目。 autotools 的全部意义在于生成一个构建系统,该系统将在仅使用标准工具的系统上构建( make、c 编译器、sh 和其他一些编译器。)不幸的是,许多开发人员发布的 tarball 编译不干净。如果您解压缩 tarball 并且它不包含配置脚本,或者如果配置脚本被破坏,这是包中的错误。解决方案绝对 安装 autoconf/automake/libtool 并尝试生成有效的配置脚本。解决方案是将构建错误作为错误报告给包维护者。

如果 Linux 发行版默认停止安装多个版本的自动工具,世界将会变得更美好,因为只有不到 0.002% 的人需要这些工具,而且任何真正需要这些工具的人都应该能够安装它他们自己。任何无法获取和安装这些工具的人都无法使用它们。

【讨论】:

以上是关于使用 Makefile.am/Makefile.in 在 Ubuntu Linux 中构建 c++ 项目的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)