Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将源添加到现有的automake程序_C++_C_Makefile_Automake - Fatal编程技术网

C++ 将源添加到现有的automake程序

C++ 将源添加到现有的automake程序,c++,c,makefile,automake,C++,C,Makefile,Automake,我想编辑现有软件以添加新的源文件(source.cpp)。 但是,我无法管理编译过程(它似乎是自动生成的,看起来非常复杂) 软件(iperf 2:)使用经典的/configuremake编译,然后make install 如果我只是将该文件添加到相应的源和include目录,则会收到以下错误消息: Settings.cpp:(.text+0x969) : undefined reference to ... 看起来makefile无法生成与我的新源文件(source.cpp)关联的输出文件。

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

软件(iperf 2:)使用经典的
/configure
make
编译,然后
make install

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

Settings.cpp:(.text+0x969) : undefined reference to ... 
看起来makefile无法生成与我的新源文件(source.cpp)关联的输出文件。所以,我可能需要在某个地方手动指示它

我在项目文件中搜索了一下,似乎要编辑的文件是:“Makefile.am”。 我将我的源代码添加到该文件中的变量
iperf\u SOURCES
,但它不起作用

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


提前感谢您

正如您已经了解的,此项目是使用autotools构建的

makefile由automake生成。它在通常具有
am
文件扩展名的文件中进行输入

iperf程序由从
src/makefile.am
生成的makefile生成。这表现在:

bin_PROGRAMS = iperf
要构建的二进制文件的所有源文件(实际上这是一种简化,但在本例中保持不变)都位于相应的name\u SOURCES变量中,因此在本例中
iperf\u SOURCES
。只需将源文件添加到该列表的末尾,如下所示(保留其格式):

现在,为了在将来生成的任何
src/Makefile
中反映此更改,您需要运行automake。
这将修改
src/Makefile.in
,这是
configure
末尾的
config.sub
用于生成实际Makefile的模板

运行automake的方式多种多样:

  • 如果您已经有了在配置之后生成的makefile,那么这些makefile应该负责重新构建它们自己。但这似乎有时会失败

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

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

后两个选项需要再次调用configure,理想的做法是执行源代码外构建:

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

您的新源文件位于某个新目录中,还是与现有源文件一起?如果更改了层次结构,则需要在make文件中更新该层次结构。否,source.cpp与以前的源位于同一目录中。我在makefile.am中添加源代码的方式与其他文件相同。有时一个makefile调用另一个makefile,该makefile编译某个不同/相同模块的源文件。您正在编辑正确的makefile吗?在makefile中的“Mptcp.cpp”和“\”之间添加一个空格,并尝试一下。您可以提供所有的makefiles和./configure file?'autoeconf--install'效果很好。谢谢你的回答:)
# in top level dir 
mkdir build
cd build
../configure # arguments 
make # should now also compile and link your new source file