将源添加到现有的automake程序

时间:2016-08-12 08:44:25

标签: c++ c makefile automake

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

软件(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软件,这个看起来非常复杂)。

提前谢谢

1 个答案:

答案 0 :(得分:2)

这个项目是使用autotools构建的,正如您已经想到的那样。

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

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

bin_PROGRAMS = iperf

所有(实际上这是一个简化,但在这种情况下保留)要构建的二进制文件的源文件位于相应的名称 _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使用的模板1}}在configure的末尾生成实际的makefile。

运行automake可以通过各种方式实现:

  • 如果您已经拥有在配置后生成的makefile,则这些应该负责重建自己。这有时似乎失败了!

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

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

后两个选项需要再次调用configure,理想情况下IMO执行out of source build:

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