权当给自己做一个笔记,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