标签: automake

在Makefile.am中为SED调用源代码

我有c ++代码需要在编译之前完成它的sed.我该如何插入Makefile.am

我尝试了典型的makefile设置,目标似乎不存在:

gentest.cc:

$(SED) -i "s|FIND|REPLACE|" gentest.cc

如果你对我为什么要这样做感兴趣,那是因为我slider3.py在python中编写了我的程序(),而我的伙伴用c ++(gentest.cc)写了他的,并且他需要调用我的.我正在通过编辑argv然后使用来完成此操作execv().

... {

char **argv2 = new char*[argc];

memset(argv2,0,sizeof(argv2));

argv2[0] = "__PREFIX__/bin/slider3.py";

memcpy(argv2 + 1, argv + 2, sizeof(char *) * (argc - 2));

int oranges = execv(argv2[0], argv2);

printf("%s\n", strerror(oranges));

return oranges;

} ...

我已经处理了#!添加到slider3.pychmod +x使用不起作用的方法gentest.cc.我还处理了添加slider3.py到已安装的文件列表.

EXTRA_DIST=testite.sh slider3_base.py

bin_SCRIPTS = slider3.py

CLEANFILES = $(bin_SCRIPTS)

slider3.py: slider3_base.py

rm -f slider3.py

echo …

automake sed autotools

3
推荐指数
2
解决办法
1848
查看次数

链接用C编写的PHP扩展

编辑:修改我的问题

在C中构建外部PHP模块时,如何链接共享对象?

php automake php-extension php-internals

3
推荐指数
1
解决办法
2248
查看次数

automake输出比命令行编译的bin更大的二进制文件

对于我正在开发的一个小项目,我一直在通过命令行使用简单的编译.然而,随着它变大,我决定学习并使用autoconf和automake来编译它.

经过一些配置,我成功使用automake构建.但是我注意到输出二进制文件的大小比通过命令行使用g ++大.我尝试使用静态和动态库,结果是一样的.

我也尝试过一个简单的hello世界,而且使用automake比使用命令行编译更大.

所以,我试图运行objdump -h:命令行编译返回27个部分,另一方面,automake编译返回相同的27个部分加上7个部分,称为debug_aranges,debug_info,debug_abbrev,debug_line,debug_loc,debug_ranges.所以我显然认为它与调试有关.

因此,任何人都知道这些部分是什么,如果它们是必要的以及如何摆脱那么所以可执行文件更小以便分发.

c++ automake autoconf

3
推荐指数
1
解决办法
313
查看次数

安装automake时Macports警告:警告:停用强制.尽管存在依赖性,仍继续进行

我刚刚安装了MacPorts并发出了命令:

sudo port install automake
Run Code Online (Sandbox Code Playgroud)

在整个过程中,我看到了这样的信息:

Warning: Deactivate forced.  Proceeding despite dependencies.
Run Code Online (Sandbox Code Playgroud)

这是什么意思?为什么会这样?它是否至关重要,如果是的话,我该怎么做呢?

谢谢,gb

automake macports

3
推荐指数
1
解决办法
1151
查看次数

Gnu autotools缺少文件depcomp

我正在尝试编写一个使用autotools构建的程序,但是当我尝试制作它时遇到了问题.Automake似乎依赖于一个名为depcomp的文件.我想知道这个文件做了什么,以及我应该填写什么/我应该怎么做.

automake gnu autotools

3
推荐指数
1
解决办法
3677
查看次数

如何在制作时将Shell脚本输出到Makefile.am中?

我正在从事一个自动工具项目,并且是自动工具领域的新手。由于种种原因,为了完整起见,在底部进行了详细说明,我有一个Shell脚本,我想从中获取输出以用于我的makefile。

我有类似以下情况。Autoconf从AC_CONFIG_FILES命令生成脚本。例如

AC_CONFIG_FILES([thescript], [chmod +x thescript])
Run Code Online (Sandbox Code Playgroud)

主题

#!/bin/sh
# -*- sh -*-
# @configure_input@
echo @abs_top_builddir@/bar/foo
Run Code Online (Sandbox Code Playgroud)

我真正想要做的是使用@abs_top_builddir@/bar/fooMakefile中返回的任何内容。我想在make时使该值在变量中可用,并且能够在我的Makefile.am中访问它,例如$(FOOPLACE)。我该如何实现?

我需要此/额外信息的原因

这个问题与我的先前的问题有关:

如何获取autoconf configure.ac中顶级构建目录的绝对路径?

该项目需要一个子项目,该子项目具有自己的makefile和configure.ac。子项目是一个程序,用于为主项目生成源文件。有一个选项可以禁用此项目的构建,并尝试使用已安装的版本。在这种情况下,变量FOOPLACE(uisng AC_PATH_PROG)中提供了已安装版本的位置。当我使用本地构建的版本时,我想FOOPLACE改用它的位置。然后,该变量在Makefile.am中用作$(FOOPLACE)

似乎autoconf中存在一个错误,这意味着可以访问abs_top_builddir的唯一位置是在配置时生成的配置文件中AC_CONFIG_FILES。在链接的问题中有我为什么要这样做的详细信息。

automake autoconf autotools

3
推荐指数
1
解决办法
4151
查看次数

链接共享库Autotools

我是一个autotools初学者,我似乎无法弄清楚如何使用autotools正确使用外部库.

这是我的目录层次结构.

.
??? configure.ac
??? Makefile.am
??? README
??? src
    (source files)
    ??? Makefile.am
Run Code Online (Sandbox Code Playgroud)

acml_mp默认情况下,库的名称是和/opt/acml5.3.1/gfortran64/lib.还有一个名为/opt/acml5.3.1/gfortran64/includeinclude 的目录.当我没有autotools编译时,包括通常的编译器标志工作正常:

g++ ... -L/opt/acml5.3.1/gfortran64_mp/lib -I/opt/acml5.3.1/gfortran64_mp/include -lacml_mp ...
Run Code Online (Sandbox Code Playgroud)

在configure.ac中,我输入了AC_LIB_LINKFLAGS([acml_mp])我认为只处理-lacml_mp标志的命令.

基本上,最终目标是对此库进行autoconf搜索,并使automake生成的makefile在编译时包含正确的链接/包含路径.最后,在手动编译时,我总是需要LD_LIBRARY_PATH使用命令修改环境变量

Export LD_LIBRARY_PATH=/opt/acml5.3.1/gfortran64_mp/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想避免让用户这样做.抱歉,如果这些信息已经存在,我通过SO和Google查看了几个小时无济于事.

linker automake autoconf autotools

3
推荐指数
1
解决办法
3115
查看次数

如何在automake中链接libavcodec,libavformat?

我在C++项目中使用来自ffmpeg的libavcodec和libavformat库.链接-lavcodec -lavformat与g ++编译器工作正常,但是当我尝试使用在automake项目中编译的相同代码时,我不确定出了什么问题.

工作正常:

g++ -o test -D__STDC_CONSTANT_MACROS -lavcodec -lavformat test.cpp
Run Code Online (Sandbox Code Playgroud)

不工作Makefile.am:

binaryname_LDFLAGS= -lavcodec -lavformat
Run Code Online (Sandbox Code Playgroud)

错误:

....
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libavformat.a(nut.o):function 
ff_nut_add_sp: error: undefined reference to 'av_tree_node_size'
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libavformat.a(nut.o):function 
ff_nut_add_sp: error: undefined reference to 'av_tree_insert'
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libavformat.a(nut.o):function 
ff_nut_free_sp: error: undefined reference to 'av_tree_enumerate'
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libavformat.a(nut.o):function 
ff_nut_free_sp: error: undefined reference to 'av_tree_destroy'
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libavformat.a(rtp.o):function 
ff_rtp_get_payload_type: error: undefined reference to 'av_opt_get_int'
...
Run Code Online (Sandbox Code Playgroud)

也没工作:

LDFLAGS=...-lavcodec -lavformat
Run Code Online (Sandbox Code Playgroud)

错误:

src/dsp/audioDecoder.cpp:99: error: undefined reference to 'av_register_all'
src/dsp/audioDecoder.cpp:101: error: undefined reference to 'avcodec_find_decoder'
src/dsp/audioDecoder.cpp:109: error: undefined reference to 'avcodec_alloc_context'
src/dsp/audioDecoder.cpp:120: error: undefined reference to …
Run Code Online (Sandbox Code Playgroud)

c++ automake ffmpeg makefile libtool

3
推荐指数
1
解决办法
3492
查看次数

AM_LDFLAGS和LDFLAGS之间有什么区别

我想知道AM_LDFLAGS和LDFLAGS之间有什么区别,因为我遇到了一个错误

error: AM_LDFLAGS must be set with '=' before using '+='
Run Code Online (Sandbox Code Playgroud)

当我在foreach循环中使用AM_LDFLAGS时,我的make文件代码如下所示:

program_INCLUDE_DIRS := /usr/bin/PR__bin

program_LIBRARY_DIRS := /usr/lib/PR__lib

CFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
Run Code Online (Sandbox Code Playgroud)

c flags automake makefile

3
推荐指数
1
解决办法
2412
查看次数

在automake中为目标添加依赖项

我遇到了一个与automake有关的问题,我似乎无法找到一个干净的解决方案,看起来它应该是可能的(甚至简单),但没有什么简单的工作.

基本上我遇到的问题是源文件包含自动生成的头文件.我可以添加依赖项来生成头文件只是文件,一旦标题存在,一切正常,因为automake的自动依赖生成处理所有事情.问题是一次在干净的树中运行make时,依赖文件不存在,因此automake不知道生成头文件,这使得包含头的文件的编译失败而不产生任何依赖.这是一个鸡蛋问题 - 你需要手动告诉(自动)make来构建头文件.

显而易见的解决方案是在头文件的Makefile.am文件中添加依赖项,但这不起作用,因为对目标的依赖关系会覆盖automake的自动规则生成,正如文档所说:

请注意,Automake不会区分具有命令的规则和仅指定依赖关系的规则.因此,如果不重新定义整个规则,则无法将新的依赖项附加到automake定义的目标.

现在我通过"隐藏"来自automake的依赖来解决这个问题,但这仅适用于GNU-make:

Makefile.am:

bin_PROGRAMS = foo
foo_SOURCES = main.c foobar.c baz.c

gen.h: system.spec
        ...command to regen gen.h

# foobar.c #includes gen.h, so it needs to exist prior to compiling foobar.c
$(eval foo-foobar.o: gen.h)
Run Code Online (Sandbox Code Playgroud)

这样做,但看起来很难看.是否有更好的自动安全方式来做到这一点?

automake

3
推荐指数
1
解决办法
834
查看次数

标签 统计

automake ×10

autotools ×4

autoconf ×3

c++ ×2

makefile ×2

c ×1

ffmpeg ×1

flags ×1

gnu ×1

libtool ×1

linker ×1

macports ×1

php ×1

php-extension ×1

php-internals ×1

sed ×1