这两天一直在捣腾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
分享到:
相关推荐
使用 automake 可以实现一键式安装,即用户只需执行 `./configure && make && sudo make install` 就可以完成软件的编译和安装。 - `./configure`:运行此脚本以生成适合当前系统的 Makefile 文件。 - `make`:根据...
### Linux系统下C编程入门知识点解析 #### 一、基础知识 **1.1 源程序编译** 在Linux环境下,使用GCC(GNU Compiler Collection)作为C语言的主要编译工具。GCC是一个强大的编译器,支持多种编程语言,包括C、C++...
- **Autoconf/Automake**:针对跨平台项目的配置和构建需求,学习如何使用这些工具可以极大地简化工作流程。 #### 结论 通过本教程的学习,你不仅能够掌握在Linux下进行C/C++编程的基本技能,还能深入了解各种工具...
### Autotools 入门详解 #### 一、Autotools 概览 Autotools 是一套用于构建跨平台软件项目的工具集,主要包括 autoconf、automake 和 libtool 等核心工具。这套工具旨在帮助开发者创建易于安装、配置且高度可移植...
- **Automake项目**:介绍使用Automake构建的项目的特性。 - **QMake项目**:解释QMake项目的特点。 - **CMake项目**:描述使用CMake管理的项目的优点。 - **ANT项目(Java项目)**:说明使用ANT构建的Java项目的...
Autotools 是一系列用于辅助在类 Unix 系统中构建 C 和 C++ 应用程序的工具集合。它包括 `autoscan`、`aclocal`、`autoconf`、`autoheader` 和 `automake` 等工具。通过这些工具可以自动化生成配置脚本和 Makefile ...
它允许开发者使用C或C++编写原生代码,然后将这些代码编译成.so动态链接库文件,从而在Android应用中调用。这种能力尤其在处理图形、音视频编码解码、高性能计算等场景时显得尤为重要,因为C/C++通常比Java拥有更好...
当写 C 代码时,只使用 C 的注释(以“/*”开头,以“*/”结尾),不要用 C++ 风格的注释(“//”)。虽然许多 C 编译器能明白 C++ 的注释,但其它的一些不能,并且 ANSI C 标准并不要求 C++ 风格的注释被处理为注释
- **编程语言**:熟练掌握C/C++,熟悉汇编语言。 - **硬件知识**:熟悉微处理器、数字电路基础。 - **操作系统**:理解嵌入式Linux的基本工作原理。 **2. 嵌入式Linux学前指导** - **目标定位**:明确学习目的,是...
GCC支持多种编程语言,如C、C++、Fortran、Ada和Objective-C等。 描述中的“宝剑锋从磨砺出——编译器gcc的使用”暗示了该资料可能涵盖了GCC的基础知识,安装过程,以及如何有效利用GCC进行项目构建和调试。编译器...
**4.3 Gcc编译器**:Gcc 是 Linux 下最常用的 C/C++ 编译器,了解如何使用 Gcc 对于进行 C 编程至关重要。 **4.4 Gdb调试器**:Gdb 是一个功能强大的调试工具,可以帮助开发者找出程序中的错误。 **4.5 Make工程管理...
它支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。GCC不仅提供了编译、汇编和链接的功能,还包含了一系列优化技术,使得编译出的代码效率更高。本书中详细介绍了如何利用GCC来编译和调试程序,包括...
一个小型可移植的C库,用于处理二进制或XML格式的Apple属性列表文件。 特征 该项目提供了一个接口,用于以二进制或XML格式读写plist文件,以及一个名为plistutil的命令行实用程序。 一些关键功能是: 格式:支持...
MySQL的移植性得益于使用GNU Automake、Autoconf和Libtool工具,这使得在不同平台上的编译变得容易。此外,MySQL提供了多种编程语言的API,如C、C++、Java、Perl、PHP、Python、Ruby和Tcl,便于开发者集成到自己的...