这两天一直在捣腾C&C++在linux上的工程编译和打包上,具体来说是使用automake生成makefile,然后make出二进制包,未做make install(实际也就是复制某些头文件到系统的xxxx/include下,以及so包或者其他类型的库文件复制到系统的xxx/lib下)。
工程依赖的一个第三方包通过源码编译而来,除非这个第三方包发生变化,否则主工程编译不会去编译他。目录类似
program/
-third-source/
-include/
-libttt.a
-Makefile
-src/
-Makefile.am
-configure.ac
-Makefile.am
主要的编译命令如下:
libtoolize --force
aclocal
autoconf
automake --add-missing --force
./configure
make
Makefile.am和configure.ac需要自己写,总Makefile.am指定需要扫描的子目录(或者需要make的子目录)。比如
SUBDIRS=@VE_SUBDIRS@
@VE_SUBDIRS@这个定义在configure.ac中(./configure这个步骤替换@@占位符),类似
VE_SUBDIRS="src"
AC_SUBST(VE_SUBDIRS)
这里我指定了只去src下进行make,因为third-source有自己的编译方式。
configure.ac这个文件中还可以指定为子目录生成Makefile,人肉去写Makefile是非常困难的事情,但是使用automake工具生成还是不错的
AC_CONFIG_FILES(Makefile src/Makefile)
具体包含有如何编译链接库和头文件的信息的Makefile.am则有一些复杂。
bin_PROGRAMS=test.out
test_out_SOURCES=test.cpp
test_out_LDFLAGS=-module ../third-source/libttt.a -lpthread
test_out_CFLAGS=$(AM_CFLAGS) -I../third-source/include
test_out_CXXFLAGS = ${test_out_CFLAGS}
noinst_HEADERS = xxx.hpp xxx2.hpp
noinst_LTLIBRARIES = libxxx.la
libxxx_la_SOURCES = xxx.cpp xxx2.cpp
libxxx_la_LDFLAGS = -module ../third-source/libttt.a -lpthread
libxxx_la_CFLAGS =$(AM_CFLAGS) -I../third-source/include
libxxx_la_CXXFLAGS = ${libxxx_la_CFLAGS_CFLAGS}
这个am实际上会输出test.out和libxxx.la,前者是一个可执行文件,后面是一个库。
另外LDFAGS指定库链接,而CFLAGS是头文件链接。另外一个非常重要的是CFLAGS是给C编译器使用,而CXXFLAGS是给C++编译器使用,如果你的工程是C++,CXXFLAGS配置千万不要落下,否则可能会因非标准头文件找不到而报错(当然是你需要默认头文件路径之外头文件的前提下),另外pthread为动态链接,-lpthread实际上会去找libpthread.so包,这里会有个默认的命名规则。
看下几个工具总体的生成各种文件的路径图吧(网络收集)。
暂时tips到这里,Makefile.am中的更多更好的强大的功能还需要不断学习,后续用到再加。
- 大小: 7.8 KB
分享到:
相关推荐
GNU-Automake-中文手册.pdf 超清 带目录 带标签
打包的GDB&GCC&G++&AUTOMAKE&MAKEFILE教程,一站式一条龙
1.autoconf automake的使用示例,比hello复杂些,更实用; 2.详细步骤参考这个哥们写的文章如下:http://blog.csdn.net/yunhua_lee/article/details/6172617
老外写的 automake,autoconf,autotools工具使用 的ppt,一共4个部分,简明扼要的教会你使用autotools
unix-os教学课件第六章unix系统编程基础-automake.pptx
或者,如果您想使用syscall模糊器: $ aclocal && autoconf && automake -a && ./configure --enable-syscalls && make && make check 如果您想禁用GTK前端,则可以执行以下操作: $ aclocal && autoco
cpuminer-kawaii 1.3.4的一个分支树莓派cd && sudo apt-get install build-essential autoconf automake libssl-dev libcurl4-openssl-dev libjansson-dev zlib1g-dev屏幕git && git clone && cd cpuminer-卡哇伊&& ...
autoconf和automake
依次执行命令:aclocal,libtoolize -f -c,autoconf,automake --add-missing,./configure,make。 3、cd */project/swap 依次执行命令:aclocal,autoconf,automake --add-missing,./configure,make。 4、cd *...
# yum -y install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses* libmcrypt* libtool-ltdl-devel* make cmake --必要软件包安装 # useradd mysql # tar -zxvf mysql-5.6.10.tar.gz # cd ...
轻松学automake.pdf—— automake及开源项目软件工程中文基础教程,很实用!
automake-1.9.5-mingwPORT
IBus 中 Fedora (Linux) 的 ...从源安装 (m1) 打开终端/包管理器并安装依赖项: yum install autoconf automake make gcc gjs ibus ibus-libs ibus-devel gjs-devel dbus-glib-devel 现在克隆 repo 并安装git clone ...
免费下载 automake-1.16.1.tar.xz_FreeDownload.zip 文件后,解压此文件即可得到 automake-1.16.1.tar.xz源文件。
gcc makefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响 一般情况 -O 编译选项 -O2 编译选项 ...automake diff rcs 内核重编译常见故障 cvs 共享库工具 代码优化 GNU 编码标准 书籍
7-LINUX程序设计与交叉编译(7)-autoconf和automake工具使作(多个文件).pdf 学习资料 复习资料 教学资源
automake 可以生成两个执行程序:main 和main2 一个automake生成多个执行程序
hi3861开发环境 automake-1.15.1.tar.gz
libtool-2.4.6.tar.gz 手动安装包 ①./configure ②make ③make install
所有基本要素组合在一起: sudo apt update && sudo apt upgrade -y && sudo apt-get -y install git tig cmake cmake-curses-gui build-essential automake autoconf autogen libncurses5-dev libc ++-dev pkg-...