当前位置: 技术问答>linux和unix
请教autoconf automake 在使用libtool情况下的依赖问题
来源: 互联网 发布时间:2016-09-12
本文导语: 我的项目目录结构如下: Project: --main |--bin1 |--bin2 --driver |--driver1 |--driver2 --utils |--utils1 |--utils2 --inc 其中 main目录下是各个主程序项目代码,driver和utils下都是一些静态...
我的项目目录结构如下:
Project:
--main
|--bin1
|--bin2
--driver
|--driver1
|--driver2
--utils
|--utils1
|--utils2
--inc
其中 main目录下是各个主程序项目代码,driver和utils下都是一些静态库或者动态库子项目,inc下是公共的头文件,应该是很常见的目录结构。现在我使用autotool管理项目,Project下一个顶层Makefile.am,然后每个子项目目录下各一个Makefile.am。所有的库(driver和utils下的项目)都使用libtool定义。例如:
lib_LTLIBRARIES=libfoo1.la
libfoo1_la_SOURCE=src1.cpp src2.cpp
libfool_la_LDFLAGS=-shared -no-undefined -L../foo2 -lfoo2
现在的主要问题是,如果在顶层直接调用make,会正常按照configure.in中定义的子目录编译顺序编译,但是如果直接进入子目录,比如上述例子foo1中make,libtool发现依赖的foo2没有生成并不会去执行foo2目录下的make,而是给出一个警告信息然后只编译foo1的静态库版本。
请问该如何解决这个问题,让其先去编译依赖的其他共享库而不是转而只编译静态版本?
另外还有几个问题,麻烦知道的朋友指导下:
1. 如何控制所有子项目编译时产生的.o文件不要和源文件混在一起而是集中到一个目录,比如top_builddir下的build目录?
2. 我是在一个交叉编译环境下,编译用到的c,c++编译器和SDK(头文件,库)都和linux系统本身的没什么关系,而是在安装配置好的某个目录下(使用gnu-cls-gcc和gnupoc项目开发symbian手机的程序,使用cegcc/mingw32ce开发wince手机程序)。在这种情况下configure.in中的各个检查宏该如何使用? 如AC_CHECK_HEADERS和AC_CHECK_LIB如何控制它们到某个环境变量指定的目录下去检查这些文件和库?
刚接触autotool,请大家指教。
PS,不要叫我用回到windows :)
Project:
--main
|--bin1
|--bin2
--driver
|--driver1
|--driver2
--utils
|--utils1
|--utils2
--inc
其中 main目录下是各个主程序项目代码,driver和utils下都是一些静态库或者动态库子项目,inc下是公共的头文件,应该是很常见的目录结构。现在我使用autotool管理项目,Project下一个顶层Makefile.am,然后每个子项目目录下各一个Makefile.am。所有的库(driver和utils下的项目)都使用libtool定义。例如:
lib_LTLIBRARIES=libfoo1.la
libfoo1_la_SOURCE=src1.cpp src2.cpp
libfool_la_LDFLAGS=-shared -no-undefined -L../foo2 -lfoo2
现在的主要问题是,如果在顶层直接调用make,会正常按照configure.in中定义的子目录编译顺序编译,但是如果直接进入子目录,比如上述例子foo1中make,libtool发现依赖的foo2没有生成并不会去执行foo2目录下的make,而是给出一个警告信息然后只编译foo1的静态库版本。
请问该如何解决这个问题,让其先去编译依赖的其他共享库而不是转而只编译静态版本?
另外还有几个问题,麻烦知道的朋友指导下:
1. 如何控制所有子项目编译时产生的.o文件不要和源文件混在一起而是集中到一个目录,比如top_builddir下的build目录?
2. 我是在一个交叉编译环境下,编译用到的c,c++编译器和SDK(头文件,库)都和linux系统本身的没什么关系,而是在安装配置好的某个目录下(使用gnu-cls-gcc和gnupoc项目开发symbian手机的程序,使用cegcc/mingw32ce开发wince手机程序)。在这种情况下configure.in中的各个检查宏该如何使用? 如AC_CHECK_HEADERS和AC_CHECK_LIB如何控制它们到某个环境变量指定的目录下去检查这些文件和库?
刚接触autotool,请大家指教。
PS,不要叫我用回到windows :)
|