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

Add source to an existing automake program

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

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

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

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

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

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

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

提前致谢

这个项目是用 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.subconfigure 末尾用于生成实际 makefile 的模板。

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

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

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

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

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

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