工程结构:
mysharedlib/
packaging/
- mysharedlib.spec
include/
- mysharedlib.h
src/
- mysharedlib.c
- CMakeLists.txt
- mysharedlib.pc.in
mysharedlib.spec
Name: mysharedlib
Summary: My shared library
Version: 0.0.1
Release: 1
Group: System/libraries
License: Flora License
Source0: %{name}-%{version}.tar.gz
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: cmake
BuildRequires: pkgconfig(gtk+-2.0)
%description
Describe what your library used for.
%package devel
Summary: My shared library
Group: Development
%description devel
my shared library development files
%prep
%setup -q
%build
%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DVERSION=%{version}
make %{?jobs:-j%jobs}
%install
rm -rf %{buildroot}
%make_install
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root,-)
%{_libdir}/*.so.*
%files devel
%defattr(-,root,root,-)
%{_prefix}/include/*
%{_libdir}/*.so
%{_libdir}/pkgconfig/%{name}.pc
CMakeList.txt内容
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(mysharedlib)
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
SET(LIBDIR "${PREFIX}/lib")
SET(INCLUDEDIR "${PREFIX}/include/mysharedlib")
IF(NOT DEFINED VERSION)
SET(VERSION "0.0.1")
ENDIF(NOT DEFINED VERSION)
#ADD_DEFINITIONS("-DPROVIDERDIR=\"${PROVIDERDIR}\"")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
INCLUDE(FindPkgConfig)
pkg_check_modules(PKGS REQUIRED gtk+-2.0)
FOREACH(FLAG ${PKGS_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${FLAG}")
ENDFOREACH(FLAG)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall")
SET(SRCS
src/mysharedlib.c)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} ${EXTRA_LDFLAGS})
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${CFLAGS}")
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION})
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/mysharedlib.h DESTINATION ${INCLUDEDIR})
INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIBDIR}/pkgconfig)
mysharedlib.pc.in
prefix=@PREFIX@
exec_prefix=@PREFIX@
libdir=@LIBDIR@
includedir=@INCLUDEDIR@
Name: mysharedlib
Description: my shared library
Version: @VERSION@
Requires.private: gtk+-2.0
Libs: -L${libdir} -l@PROJECT_NAME@
Cflags: -I${includedir}