标签: automake

如何使用automake安装数据目录树

如何使用automake安装HTML文件,样式表和图像的目录树,而无需在每个子目录中创建Makefile?

在顶层目录中使用以下内容

htmldir = $(docdir)/foo/html
html_DATA = \
        stylesheets/foo.css \
        images/foo.jpg \
        index.html \
        about/index.html \
        faq/index.html
EXTRA_DIST = $(html_DATA)
Run Code Online (Sandbox Code Playgroud)

失败,因为在install调用之前未创建子目录.

automake

10
推荐指数
1
解决办法
2973
查看次数

使用pkg-config宏PKG_CHECK_MODULES失败

我确信这是一个相当简单的问题.我有一个非常简单的configure.ac文件,我正在使用它来了解autoconf和pkg-config如何协同工作.该confgure.ac文件看起来像:

AC_PREREQ(2.61)
AC_INIT(autoconf_test, 1.0, nowhere@dev.null)

PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4)
Run Code Online (Sandbox Code Playgroud)

然后我可以从命令行执行autoconf,它确实生成了一个配置脚本.但是,当我运行配置脚本时,我收到以下错误:

./configure: line 1618: syntax error near unexpected token `libusbmuxd,'
./configure: line 1618: `PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4)'
Run Code Online (Sandbox Code Playgroud)

如果我使用命令行中的pkg-config程序检查它是否可以找到此库,则会成功.

/usr/lib/pkgconfig $pkg-config --libs --cflags --modversion libusbmuxd

1.0.7
-I/usr/local/Cellar/usbmuxd/1.0.7/include  -L/usr/local/Cellar/usbmuxd/1.0.7/lib -lusbmuxd  
Run Code Online (Sandbox Code Playgroud)

所以,似乎很清楚,由于某种原因,PGK_CHECK_MODULE无法定位宏,我不知道为什么.

这可能不是特定于操作系统,但我使用的是Mac OS X 10.6.8.

macos automake autoconf pkg-config osx-snow-leopard

10
推荐指数
1
解决办法
1万
查看次数

如何避免重新定义VERSION,PACKAGE等

我没有看到任何与GNU autoconf/automake构建有关的问题,但我希望至少有一些人熟悉它.开始:

我有一个项目(我称之为myproject),包括另一个项目(供应商).供应商项目是由其他人维护的独立项目.包含这样的项目是相当简单的,但在这种情况下有一个小问题:每个项目都生成自己的config.h文件,每个文件定义标准宏,如PACKAGE,VERSION等.这意味着,在构建期间,当供应商正在构建中,我收到很多这样的错误:

... warning: "VERSION" redefined
... warning: this is the location of the previous definition
... warning: "PACKAGE" redefined
... warning: this is the location of the previous definition
Run Code Online (Sandbox Code Playgroud)

这些只是警告,暂时至少,但我想摆脱它们.我已经能够通过Google搜索获得的唯一相关信息是automake邮件列表中的这个主题,这不是很多帮助.还有其他人有更好的想法吗?

c unix linux automake autoconf

9
推荐指数
1
解决办法
1538
查看次数

使用Autotools预编译的头文件

是否可以在使用automake/libtool的项目中使用gcc预编译头文件?

添加新的make规则来构建预编译头文件并不困难.问题是你还必须添加由libtool和AFAIK引入的编译标志,它无法处理标头输入文件.

你怎么能这样做?

automake autoconf autotools precompiled-headers libtool

9
推荐指数
1
解决办法
1959
查看次数

加快autoconf /配置大型项目

我有一个大型的autoconf/automake项目,使用AC_CONFIG_SUBDIRS分解成组件.有没有办法让autoconf/configure运行得更快?也许并行进行子目录,或缓存可重用的结果?

我可以轻松地编写一个可以并行构建组件的构建脚本,但更愿意不添加构建结构维护的辅助点.

automake autoconf

9
推荐指数
2
解决办法
2718
查看次数

在automake中抑制"C source see但`CC` undefined"?

我有一个Makefile.am用于编译Ocaml源代码的ocamlbuild.但是,即使我有

AM_INIT_AUTOMAKE([foreign no-dependencies])
Run Code Online (Sandbox Code Playgroud)

在我的configure.ac,automake认为必须有一个C编译器来安装exectuables.也就是说,如果我将Makefile.am目标可执行文件放入bin_PROGRAMS使用ocamlbuild构建,则autoreconf(版本1.11.3)告诉我:

Makefile.am: C source seen but `CC' is undefined
Makefile.am:   The usual way to define `CC' is to add `AC_PROG_CC'
Makefile.am:   to `configure.ac' and run `autoconf' again.
autoreconf: automake failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)

希望有AC_PROG_CC,因为我的源代码不包括C.它是纯粹的Ocaml程序编写.我能做什么?(我有同样的问题libexec_PROGRAMS.)

automake autoconf ocaml

9
推荐指数
2
解决办法
1210
查看次数

Makefile.in和变量替换

Makefile.in我看到变量定义,其中外部变量名称包含在两个@符号之间

# @configure_input@

package = @PACKAGE_NAME@
Run Code Online (Sandbox Code Playgroud)

那些外部变量来自哪里?另外,我在GNU手册中找不到两个@符号之间完全包含变量的含义是什么意思?它是Makefile.in特有的东西吗?

谢谢.

automake autoconf makefile

9
推荐指数
2
解决办法
2149
查看次数

使用Automake更正GCC命令行顺序

我有一个autotools项目,可以在Mac上编译得很好,但在Linux(Ubuntu 12.04.1 LTS)下,命令行传递给gcc库相对于目标文件乱序.例如,autotools生成以下命令来编译我的代码,一个名为test.c二进制文件的文件命名为test:

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -lglib-2.0 -o test test-test.o
Run Code Online (Sandbox Code Playgroud)

此命令行失败:

/home/user/glib-test/test.c:4: undefined reference to `g_malloc`
/home/user/glib-test/test.c:5: undefined reference to `g_free`
Run Code Online (Sandbox Code Playgroud)

但是,如果我从命令行编译并将其切换,以便库引用位于目标文件之后,它可以正常工作:

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -o test test-test.o -lglib-2.0
Run Code Online (Sandbox Code Playgroud)

挑战在于我无法弄清楚如何强制Autotools以正确的顺序生成命令行.为了清楚起见,我在这里重现了简单的测试用例.首先是configure.ac:

dnl Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(glib-test, 1.0)

AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE()

AC_PROG_CC
AM_PROG_CC_C_O
PKG_CHECK_MODULES(GLIB, glib-2.0 > 2.0)
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)

接下来很简单Makefile.am:

CFLAGS=-Wall
bin_PROGRAMS=test
test_CFLAGS=$(GLIB_CFLAGS)
test_LDFLAGS=$(GLIB_LIBS)
test_SOURCES=test.c
Run Code Online (Sandbox Code Playgroud)

最后,这个最小测试用例的源代码,test.c:

#include <glib.h>

int …
Run Code Online (Sandbox Code Playgroud)

linux automake gcc autotools

9
推荐指数
1
解决办法
3316
查看次数

automake出错

我正在尝试为hello world示例C程序创建安装包.

我已经完成了以下工作.

自动扫描

mv configure.scan configure.ac编辑configure.ac以添加一些宏.

aclocal会

在其中创建Makefile.am

bin_PROGRAMS = hello
hello_SOURCES = hello.c
Run Code Online (Sandbox Code Playgroud)

最后我做了automake.

然后我收到了消息..

configure.ac:12: error: required file './compile' not found
configure.ac:12:   'automake --add-missing' can install 'compile'
configure.ac:6: error: required file './missing' not found
configure.ac:6:   'automake --add-missing' can install 'missing'
Makefile.am: error: required file './INSTALL' not found
Makefile.am:   'automake --add-missing' can install 'INSTALL'
Makefile.am: error: required file './NEWS' not found
Makefile.am: error: required file './README' not found
Makefile.am: error: required file './AUTHORS' not found
Makefile.am: error: required …
Run Code Online (Sandbox Code Playgroud)

automake autoconf autotools configure

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

automake subdir-objects已禁用

我在使用automake时遇到了以下错误.我知道你可以把AUTOMAKE_OPTIONS = subdir-objects"放在Makefile.am的顶部.但是如何为所有文件设置这种行为,所以我不需要逐个进行呢?

Makefile.am:454: warning: source file 'libs/esl/src/esl_threadmutex.c' is in a subdirectory,
          Makefile.am:454: but option 'subdir-objects' is disabled
          Makefile.am:454: warning: source file 'libs/esl/ivrd.c' is in a subdirectory,
          Makefile.am:454: but option 'subdir-objects' is disabled
          Makefile.am:454: warning: source file 'libs/esl/src/esl_json.c' is in a subdirectory,
          Makefile.am:454: but option 'subdir-objects' is disabled
          Makefile.am:454: warning: source file 'libs/esl/src/esl_buffer.c' is in a subdirectory,
          Makefile.am:454: but option 'subdir-objects' is disabled
          tests/unit/unit.mk:6: warning: source file 'tests/unit/switch_event.c' is in a subdirectory,
          tests/unit/unit.mk:6: but option 'subdir-objects' is disabled
          Makefile.am:854:   'tests/unit/unit.mk' …
Run Code Online (Sandbox Code Playgroud)

linux automake gnu-make

9
推荐指数
1
解决办法
8516
查看次数