交叉编译多个cpp或者c文件自动构建Makefile

正好今天要使用automake来生成makefile,在此做个记录。
目前在同一个文件夹下有如下几个c++文件
图片代码文件
下面一步一步的生成makefile文件
首先执行 :

ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ autoscan 

执行该命令后,会根据我的源码生成configure.scan文件,然后修改或者拷贝成configure.ac文件,大致过程如下:
your source files –> [autoscan*] –> [configure.scan] –> configure.ac

这里该需要对configure.ac做一下修改:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT(acontiethercat, [1.0], [])
AM_INIT_AUTOMAKE(acontiethercat,1.0)
AC_CONFIG_SRCDIR([SyncSmDemoMain.cpp])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX(arm-linux-gnueabihf-g++)
AC_PROG_CC(arm-linux-gnueabihf-gcc)

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T

# Checks for library functions.
AC_CHECK_FUNCS([clock_gettime uname])

AC_OUTPUT(Makefile)

其中要改正的部分有:
AC_INIT(acontiethercat, [1.0], [])
其格式为:AC_INIT(package, version, bug-report-address)
这个第一个参数是要生成的bin文件的名字,第二个参数版本号,第二个参数写邮箱或者反馈bug的连接。

AM_INIT_AUTOMAKE(acontiethercat,1.0)
新加入的一个宏,为automake提供设置可移植性参数的一个宏,参数取上面的宏的前两项。

AC_CONFIG_SRCDIR([SyncSmDemoMain.cpp])
这只main函数所在的源码文件。

AC_PROG_CXX(arm-linux-gnueabihf-g++)
AC_PROG_CC(arm-linux-gnueabihf-gcc)
这里设置交叉编译器。
注意这个*.ac的格式,括号与宏之间不能用空格,例如:
AC_INIT ([oops], [1.0]) # incorrect
AC_INIT([hello], [1.0]) # good

AC_OUTPUT(Makefile)
每一个*.ac比如configure.ac文件都要以这个宏结束。
有了这个宏才会生成config.status并且运行它。我们这里吧输出文件设置Makefile ,该宏的设置格式为:

AC_OUTPUT ([file]. . . , [extra-cmds], [init-cmds]) 

这个宏是替换之前的废弃的老的格式:

AC_CONFIG_FILES(file...)
AC_CONFIG_COMMANDS([default],extra-cmds, init-cmds)
AC_OUTPUT

接下来执行aclocal 来生成aclocal.m4文件。执行autoconf生成configure文件。执行autoheader ,生成config.h.in ,config.h文件。

ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ aclocal
ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ autoconf
ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ autoheader 

完毕后,就要手动建立一个Makefile.am文件设置一些参数等等,下面我写的一个makefile.am

AM_LDFLAGS = -lpthread -lc -lm -lrt -ldl  -lemllCPSW -lemllDW3504 \
            -lemllFslFec -lemllGEM -lemllSockRaw
CXXFLAGS = -D__STDC_LIMIT_MACROS -g -Wall -DORDER_SERIALIZE \
-L /home/ubuntu/work/bbb/armv6-vfp-eabihf -I /home/ubuntu/work/bbb/INC \
-I/home/ubuntu/work/bbb/INC/Linux

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=acontisethercat
acontisethercat_SOURCES= ecatDemoCommon.cpp  \
                        Logging.cpp      \
                        SyncSmDemo.cpp   \
                        ecatNotification.cpp \
                         selectLinkLayer.cpp \
                         SyncSmDemoMain.cpp  \
                        EcTimer.cpp
~                                                                                                     
~                                        

AM_LDFLAGS CXXFLAGS
是设置一些参数的,因人而异。
bin_PROGRAMS=acontisethercat
是设置做成二进制的文件名字
acontisethercat_SOURCES
这是设置是二进制的所以依赖的cpp文件。acontisethercat_SOURCES这个宏的前面的名字与生成二进制的名字向对应。

而下来就可以执行 automake –add-missing

ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ automake --add-missing  

接下来要进行配置,假如交叉编译,配置的时候要加上host参数

ubuntu@VM-145-227-ubuntu:~/work/bbb/EcMasterDemoSyncSm$ ./configure  --host=arm-linux-gnueabihf

一切完毕,就可以进行make了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值