将源代码添加到现有的 automake 程序
Add source to an existing automake program
我想编辑现有软件以添加新的源文件 (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软件,这个看起来很复杂)。
提前致谢
这个项目是用 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
在 configure
末尾用于生成实际 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
我想编辑现有软件以添加新的源文件 (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软件,这个看起来很复杂)。
提前致谢
这个项目是用 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
在 configure
末尾用于生成实际 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