将源代码添加到现有的 automake 程序

Posted

技术标签:

【中文标题】将源代码添加到现有的 automake 程序【英文标题】:Add source to an existing automake program 【发布时间】:2016-08-12 08:44:24 【问题描述】:

我想编辑现有软件以添加新的源文件 (Source.cpp)。 但是,我无法管理编译过程(它似乎是automake,看起来很复杂)。

软件 (iperf 2: https://sourceforge.net/projects/iperf2/files/?source=navbar) 使用经典的./configure make 然后make install 编译。

如果我只是将文件添加到相应的源和包含目录,我会收到以下错误消息:

Settings.cpp:(.text+0x969) : undefined reference to ... 

看起来 makefile 无法生成与我的新源文件 (Source.cpp) 关联的输出文件。所以,我可能需要在某处手动指出它。

我在项目文件中搜索了一下,似乎要编辑的文件是:“Makefile.am”。 我将我的源添加到该文件中的变量iperf_SOURCES,但它没有工作。

你能帮我找到我需要指出我的新源文件的文件吗(这似乎是一个非常标准的编译方案,但我从未使用过 automake 软件,而且这个似乎很复杂)。

提前谢谢你

【问题讨论】:

您的新源文件在某个新目录中还是与现有源文件一起?如果您更改了层次结构,则需要在 make 文件中进行更新。 不,source.cpp 与之前的源在同一目录中。我以与其他文件相同的方式在 makefile.am 中添加源代码。 有时一个makefile调用另一个makefile来编译一些不同/相同模块的源文件。你在编辑正确的 makefile 吗? 在你的makefile中的“Mptcp.cpp”和“\”之间添加一个空格并试一试 你能提供你所有的makefile和./configure文件吗? 【参考方案1】:

这个项目是用自动工具构建的,你已经知道了。

makefile 由 automake 构建。它在通常具有am 文件扩展名的文件中接受输入。

iperf 程序由src/Makefile.am 生成的makefile 构建。这表明:

bin_PROGRAMS = iperf

要构建的二进制文件的所有(实际上这是一种简化,但在这种情况下仍然存在)源文件都在相应的 name_SOURCES 变量中,因此在这个案例iperf_SOURCES。只需将您的源文件添加到该列表的末尾,就像这样(保持它们的格式):

iperf_SOURCES = \
                Client.cpp \
# lines omitted
                tcp_window_size.c \
                my_new_file.c

现在,要在任何将来生成的 src/Makefile 中反映此更改,您需要运行 automake。 这将修改 src/Makefile.in,这是最后由 config.sub 使用的模板configure 生成实际的 makefile。

可以通过多种方式运行 automake:

如果您已经拥有在配置后生成的 makefile,这些应该自行重建。不过,这似乎有时会失败!

您可以手动运行 automake(在***目录中)。我从来没有这样做过,因为有更好的解决方案......

在***目录中运行 autoreconf --install(可能将 --force 添加到参数中)。这将重新生成整个构建系统,调用所有需要的程序,例如 autoheader、autoconf,当然还有 automake。 这是我最喜欢的解决方案。

后两个选项需要再次调用 configure,IMO 理想情况下是在源外构建:

# in top level dir 
mkdir build
cd build
../configure # arguments 
make # should now also compile and link your new source file

【讨论】:

´autoreconf --install´ 就像一个魅力。谢谢你的精彩回答:)

以上是关于将源代码添加到现有的 automake 程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将 HTML 代码添加到现有的 HTML 文件

如何将一些脚本添加到现有的 swf 文件中?

将 UIView 添加到现有的 UIViewController

如何将一些脚本添加到现有的swf文件?

如何将自定义 AxisItem 添加到现有的 PlotWidget?

jquery-select2 - 将 select2 添加到现有的下拉代码中以使其可搜索