Jér*_*tin 5 gcc makefile compilation autotools libtool
我正在运行Linux,Ubuntu 10.04.
这不是我第一次尝试使用autotools.我做了很多研究并遵循了很多教程:这是我想要做的,我尝试过的以及我面临的问题.
目标:
我尝试了什么,我在哪里:
库名称为FXPLib,包名称为libfxplib-0.1
我的项目文件夹是:
Makefile.am (the only one)
include
include/fxplib.h (main header)
include/FXPLib
include/FXPLib/header1.h (these are public headers)
include/FXPLib/header2.h
include/FXPLib/...
src
src/sub1/file1.c
src/sub2/file1.c
src/sub3 ...
Run Code Online (Sandbox Code Playgroud)我运行了autoscan,得到了一个configure.ac,在这里编辑了它:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT([libfxplib-0.1], [0.1], [<>])
AC_CONFIG_SRCDIR([src/object_system/FXP_image_s.h])
AC_CONFIG_HEADERS(config.h)
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
AM_PROG_LIBTOOL
LT_PREREQ([2.2])
LT_INIT
# Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdlib.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([memset])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)我写了这样的Makefile.am:
lib_LTLIBRARIES = libfxplib-0.1.la
libfxplib_0_1_la_CFLAGS = -I$(srcdir)/include -I$(srcdir)/include/FXPLib `sdl-config --cflags --libs` -lSDL_image
libfxplib_0_1_la_SOURCES = src/sub1/file1.c \
src/sub1/file2.c \
src/sub2/file1.h \
...
nobase_include_HEADERS = include/fxplib.h \
include/FXPLib/header1.h \
include/FXPLib/header2.h \
...
ACLOCAL_AMFLAGS = -I m4
Run Code Online (Sandbox Code Playgroud)从那里,一切都很好.但后来我尝试编译:
$ ./configure
Run Code Online (Sandbox Code Playgroud)
一切都还好......
$ make
Run Code Online (Sandbox Code Playgroud)
然后我得到:
...
src/graphics_engine/FXP_rendering.c:35:25: error: FXP_image_s.h: File not found
...
Run Code Online (Sandbox Code Playgroud)
其中:
这意味着:automake可以在子目录中编译.c文件,但不能在这些文件中包含另一个子目录中的私有.h文件.
我的问题是:如何告诉automake编译每个子目录中的每个文件,就像它们都在同一个地方一样?
我希望我能理解(对于你在我的话中可以找到的一些问题感到抱歉,因为我是法国人)
提前谢谢你.
您configure.ac和Makefile.am文件看起来像是必须花费大量精力学习.恭喜!一个有用的技巧是,你可以运行autoreconf的,而不是整个链条aclocal,autoheader,autoconf,automake,等.
在这种情况下的问题实际上不是autotools,而是C编译器本身 - 你正在项目的根目录中执行编译器来编译文件src/sub,但由于src/sub2既不是当前目录也不是包含路径,编译器不会知道在哪里找到它.
尝试添加-I$(srcdir)/src/sub2到您的libfxplib_0_1_la_CFLAGS行中Makefile.am.这将更改包含路径以指示编译器查找头文件src/sub2,因此您必须为sub包含另一个目录中使用的头文件的每个目录添加类似的指令.
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |