我正在将现有库(libtcod)直接转换为Autotools(用于OS X幸福).不幸的是,当我改变我Makefile.am的lib_LIBRARIES规则时lib_LTLIBRARIES,构建从成功转为un.摘录自以下输出:
Making all in .
make[1]: Nothing to be done for `all-am'.
Making all in src
/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -MT bresenham_c.lo -MD -MP -MF .deps/bresenham_c.Tpo -c -o bresenham_c.lo bresenham_c.c
mv -f .deps/bresenham_c.Tpo .deps/bresenham_c.Plo
mv: rename .deps/bresenham_c.Tpo to .deps/bresenham_c.Plo: No such file or directory
make[1]: *** [bresenham_c.lo] Error 1
make: *** [all-recursive] Error 1
Run Code Online (Sandbox Code Playgroud)
src/Makefile.am 看起来像这样:
lib_LTLIBRARIES = libtcod.la
libtcod_la_SOURCES = bresenham_c.c bresenham3_c.c bsp_c.c color_c.c ...
Run Code Online (Sandbox Code Playgroud)
src/.deps 包含: …
如何在automake中设置库的顺序?
在我的文件中,我有类似的东西:
myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc
Run Code Online (Sandbox Code Playgroud)
现在,当我编译时,我也得到了类似的编译行:
gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a
Run Code Online (Sandbox Code Playgroud)
问题是libmine.a依赖于libadhoc.a,因此编译行应该是:
gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc
Run Code Online (Sandbox Code Playgroud)
如何在automake中设置库的顺序?(或者可能是一个解决方法;如何重复编译行中的所有库.这就是我在自定义Makefile中所做的.)
我需要为一个项目包含GLib头文件,该项目是使用基于autoconf的系统构建的,以便于移植.
如何以可移植的方式安全地导入GLib标头?我知道pkg-config,但这不是完全可移植的(因为有些系统没有它,我宁愿只依靠autoconf进行配置).
如何强制automake创建标准的共享库,而不是libtoolized库?通常,我创建的abc.so是以完整路径引用并加载到主程序中.有没有办法强制AM做同样的事情?如果我将其列为_LIBRARY,则automake会抱怨:'abc.so' is not a standard library name; did you mean 'libabc.a'
只是为了澄清:是的,我只需要.so支持 - 没有静态.是的,我想要一个自定义文件名.
我正在学习autotools,并通过一个hello world场景制作它,现在想尝试将一些cppunit测试包装到一个包中并使用autotools构建它.为了构建软件包,必须在系统上安装cppunit.在构建的./configure部分中检查此问题的最佳方法是什么.
我查看了AC_CHECK_LIB,然后查看了有关使用pkg-config的一些信息.我如何在autotools领域中使用pkg-config来检查构建系统中是否存在cppunit,然后添加include和link行.
任何帮助,将不胜感激.谢谢.
史蒂夫
我有一个autotools项目:automake,autoconf.
我想禁止make从改造的文件configure,Makefile.in等等; 只是为了编译工作.
有些文件是手工编辑的,我知道我不应该这样做.(或者项目已从CVS更新,所有生成的文件都存储在CVS中).但目前我没有安装正确版本的autotools.
必须修改此文件的时间(必须更新/更旧):
aclocal.m4
configure.in
confdb/ax_prefix_config_h.m4
Makefile.am
Makefile.in
Makefile
configure
config.status
Run Code Online (Sandbox Code Playgroud)
或者:touch我必须执行哪些命令才能实现目标?
我最近将构建系统转换为automake/autoconf.在我的项目中,我有一些单元测试,需要在运行它们的目录中输入一些输入数据文件.当我运行make distcheck并尝试VPATH构建时,这些测试失败,因为它们显然不是从输入文件所在的目录运行的.我想知道是否有一些快速解决方案.例如,我可以以某种方式告诉系统不要在make distcheck上运行这些测试(但仍然在make check上运行它们)?或者在运行测试之前cd到文件所在的目录?
我想知道是否有人设法使用Android NDK(r8d)的工具链来构建新的SDL2.
SDL2似乎非常接近发布(从昨天起它不再是"UNDER CONSTROCTION:http://hg.libsdl.org/SDL/rev/0a3d2ec7af6d ).它附带一个Android.mk并且只是编译好的跟随捆绑的README.android文件中的说明.我的问题是,是否真的没有可用的基于automake的构建,或者可以在Android上编译它,或者我的工具链设置有什么问题?
我按照位于$ NDK/doc/STANDALONE-TOOLCHAIN.html的文档说明安装了NDK工具链.我正在使用gcc 4.6.这是我使用的一个环境:
#!/bin/sh
export TOOLCHAIN=$HOME/Android/android-14-arm
export PATH=$TOOLCHAIN/bin:$PATH
export SYSROOT=$TOOLCHAIN/sysroot
export CROSS_COMPILE="arm-linux-androideabi"
export CC=$CROSS_COMPILE-gcc
export CXX=$CROSS_COMPILE-g++
export CPP=$CROSS_COMPILE-cpp
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"
export LDFLAGS="-march=armv7-a -Wl,--fix-cortex-a8"
echo "Compiler set up for ARM 14"
Run Code Online (Sandbox Code Playgroud)
配置参数:
./configure --host=arm-linux-androideabi --prefix=$SYSROOT/usr/local
Run Code Online (Sandbox Code Playgroud)
使用相同的配置我成功构建了libjpeg-turbo v8和SDL_image.configure脚本识别交叉编译器,并构建makefile,但是,它发现X11支持,无法看到OpenGL ES ... make失败:
In file included from /usr/include/features.h:378:0,
from /usr/include/sys/types.h:27,
from ./include/SDL_stdinc.h:35,
...
Run Code Online (Sandbox Code Playgroud)
我检查了配置日志,我不知道"/ usr/include"来自哪里.但实际上,生成的makefile会将EXTRA_CFLAGS中的那一行添加到编译器中.NDK文档引用--with-sysroot = $ SYSROOT作为可选项,我已经将它包括在内以查看它是否解决了问题,但这没有帮助.作为最后的努力,我手动编辑Makefile,修复该引用,现在编译器抱怨X11.h. AFAIK Android与X11无关,所以我猜整个构建树完全不适合与NDK一起使用.
我也尝试了一种不同的配置,在这里的旧线程中找到.既没有定义-DANDROID -mandroid -fomit-frame-pointer也没有改回-march = armv7-a -mfloat-abi = softfp -mfpu = vfp …
我正在开发一个需要子项目的项目,该子项目有自己的makefile和configure.ac.子项目是一个程序,用于为主项目生成源文件.可以选择禁用此项目的构建,并尝试使用已安装的版本.
在任何一种情况下,我都会创建一个变量,该变量在我的Makefile.am中使用,包含程序的路径.
我的问题是,当使用项目的本地版本时,如何在Makefile.am中获取其位置?
我试过了
FOOPLACE=${abs_top_builddir}/bar/foo
Run Code Online (Sandbox Code Playgroud)
但这总是FOOPLACE只包含/bar/foo.即使在原则上,我也不确定这是否是正确的方法.
pkginclude_HEADERS上的这个主题涵盖了很多这个主题
我有一个开源库,它有一些包含常用名称.我怀疑最好的解决方案是让我的伞包含在pkginclude_HEADERS目录中的文件,然后在那里有一个包含所有其他头文件的附加目录.然后在伞文件中,用法将是#include.
我如何强迫automake这样做?谢谢!
automake ×10
autotools ×6
autoconf ×4
makefile ×2
android-ndk ×1
c ×1
cvs ×1
gcc ×1
libtool ×1
macos ×1
pkg-config ×1
sdl ×1
toolchain ×1
unit-testing ×1