经验分享: automake下的简单工程

权当给自己做一个笔记,autotool 下新申请subsystem以及make file框架

工程目录效果图如下

部门里面有专职负责帮忙申请新subsystem的专家,邮件告知subsystem名称以及存在的意义,并且告知存放的repo(gitlab / gerrit) 

configure.ac

# Change the numbers just before release.
AC_INIT([your_own_subsystem], [1.0.0], [], [], [https://gitlabe2.xxx.com/xyz/your_own_subsystem])

AC_LANG([C++])
AC_CONFIG_AUX_DIR([build-aux])

# AUTOMAKE GLOBAL OPTIONS
AM_INIT_AUTOMAKE(
    [-Wall -Werror -Wno-portability subdir-objects foreign 1.13 tar-pax])
AM_SILENT_RULES([no])

AM_PROG_AR
AC_PROG_MKDIR_P

LT_PREREQ([2.4.6])
LT_INIT([disable-static pic-only])
LT_LANG([C++])

AC_CONFIG_MACRO_DIR([m4])
AX_PTHREAD

PKG_CHECK_MODULES([GTEST], [gtest_main])
PKG_CHECK_MODULES([GMOCK], [gmock])

#code coverage related macro and variables
AX_CODE_COVERAGE
CPPFLAGS="$CPPFLAGS \$(CODE_COVERAGE_CPPFLAGS)"
CXXFLAGS="$CXXFLAGS \$(CODE_COVERAGE_CXXFLAGS)"
CFLAGS="$CFLAGS \$(CODE_COVERAGE_CFLAGS)"
LDFLAGS="$LDFLAGS \$(CODE_COVERAGE_LDFLAGS)"

##Compile flags
AX_COMPILER_FLAGS_CXXFLAGS([WARN_CXXFLAGS],[],
                        [-fstrict-aliasing -pthread],[-Werror -Wno-inline])

AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile proxy/Makefile service/Makefile])
AC_OUTPUT

外层的makefile

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = proxy service

#####################################################################
#UNIT Test Code Coverage
include $(top_srcdir)/aminclude_static.am

CODE_COVERAGE_OUTPUT_DIRECTORY = htmlcov
CODE_COVERAGE_BRANCH_COVERAGE = 1
CODE_COVERAGE_IGNORE_PATTERN = "/usr/*" "*/tst/*" "/opt/*"

#Command to check to generate code coverage
clean-local: code-coverage-clean
distclean-local: code-coverage-dist-clean

#####################################################################




proxy子目录的makefile

ACLOCAL_AMFLAGS = -I m4

BASE_CPPFLAGS = \
    -Wall -Werror -Wextra \
    -I$(top_srcdir)/proxy/ping/include \
    $(PTHREAD_CFLAGS)

BASE_LDFLAGS =
BASE_LIBS =  \
    $(PTHREAD_LIBS)

yourownplugindir = $(YOUR_OWN_PLUGIN_DIR)
yourownplugin_LTLIBRARIES = libyourownplugin.la

libyourownplugin_la_SOURCES = \
    ping/src/xyz.cpp

libyourownplugin_la_CPPFLAGS = $(BASE_CPPFLAGS)
libyourownplugin_la_LDFLAGS = $(BASE_LDFLAGS) -avoid-version -module -shared -export-dynamic
libyourownplugin_la_LIBADD = $(BASE_LIBS)

check_PROGRAMS =             \
    yourownplugintest

UTESTCPPFLAGS=$(BASE_CPPFLAGS) \
              $(GTEST_CFLAGS) \
              $(GMOCK_CFLAGS) \
              -I$(top_srcdir)/proxy/ping/tst

UTESTLIBS=$(PTHREAD_LIBS) \
          $(GTEST_LIBS) \
          $(GMOCK_LIBS)

yourownplugintest_SOURCES =  \
./ping/tst/PingProxyHandlerTest.cpp  \
./ping/tst/NetConfPingHandlerTest.cpp

yourownplugintest_CPPFLAGS = $(UTESTCPPFLAGS)

yourownplugintest_CXXFLAGS = $(AM_CXXFLAGS)
yourownplugintest_LDFLAGS = $(BASELDFLAGS)

yourownplugintest_LDADD = \
    $(UTESTLIBS) \
    ./libyourownplugin.la

TESTS = yourownplugintest

SPEC文件

Name:           your_own_subsystem
Version:        1.0.0
Release:        1%{?dist}
Summary:        your own subsystem

License:        company License
URL:            https://gitlabe2.xyz/your_own_subsystem
Source0:        https://gitlabe2.xyz/your_own_subsystem/repository/archive.tar.gz?ref=pq%{version}#/%{name}-%{version}.tar.gz

BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  libtool
BuildRequires:  boost-devel
BuildRequires:  autoconf-archive

BuildRequires:  pkgconfig(gmock)
BuildRequires:  pkgconfig(gmock_main)
BuildRequires:  pkgconfig(gtest)
BuildRequires:  pkgconfig(gtest_main)

BuildRequires:  lcov

%description
%{name} processes and plugins for your  own subsystem.

%package yourownplugin
Requires:       XYZ
Summary:        Plugin for XYZ  proxy

%description yourownplugin
The %{name}-yourownplugin contains plugin for XYZ  proxy.

%prep
%setup

%build
./autogen.sh
%configure
%make_build

%check
%make_check

%install
%make_install
rm -f %{buildroot}%{yourownplugindir }/libyourownplugin.*a

%files
%{_bindir}/yourownservice

%files yourownplugin
%{yourownplugindir }/libyourownplugin.so

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值