将源代码添加到现有的 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 文件
将 UIView 添加到现有的 UIViewController