DIRECTORY
├─include │ └─libofd ├─lib │ └─googletest ├─src ├─tst
└─.clang-format
.clang-format
BasedOnStyle: Google
CMakeList.txt
cmake_minimum_required(VERSION 3.5)
project("ofd")
include_directories(
./include
/usr/local/include
)
link_directories(
/usr/local/lib
)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(LIBOFD_DEPENDENCY tinyxml2 zip)
set(LIBOFD_INCLUDEDIR ${CMAKE_SOURCE_DIR}/include)
if (CMAKE_HOST_WIN32)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
# win64
include_directories(
D:/opt/include
D:/boost_1_75_0
)
link_directories(
D:/opt/lib
D:/boost_1_75_0/stage/lib
)
else ()
# win32
include_directories(
D:/opt_x86/include
D:/boost_1_75_0
)
link_directories(
D:/opt_x86/lib
D:/boost_1_75_0/stage/lib
)
endif ()
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Zi /Od /DEBUG")
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
else ()
# set(CMAKE_CXX_FLAGS "-finput-charset='utf-8' -fexec-charset='utf-8'")
# set(LIBOFD_DEPENDENCY ${LIBOFD_DEPENDENCY} stdc++fs)
set(LIBOFD_DEPENDENCY ${LIBOFD_DEPENDENCY} boost_filesystem boost_date_time)
endif ()
add_subdirectory("src")
add_subdirectory("tst")
add_subdirectory("lib/googletest" EXCLUDE_FROM_ALL)
src/CMakeList.txt
set(LIBOFD_BINARY ${CMAKE_PROJECT_NAME})
set(LIBOFD_SRC_DIR ${CMAKE_BINARY_DIR}/src)
file(GLOB_RECURSE LIBOFD_SOURCES LIST_DIRECTORIES true *.h *.cpp)
set(LIBOFD_SOURCES ${LIBOFD_SOURCES} "${LIBOFD_SRC_DIR}/config.h")
# Version information
set(LIBOFD_VERSION 0.1.0-alpha.1)
set(LIBOFD_RC_VERSION 0,1,0,0)
# Version add build metadata
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if (GIT_VERSION)
set(LIBOFD_VERSION ${LIBOFD_VERSION}+${GIT_VERSION})
set(BUILD_METADATA YES)
endif ()
execute_process(
COMMAND svn info --show-item url --no-newline
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE SVN_URL
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND svn info ${SVN_URL} --show-item last-changed-revision --no-newline
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE SVN_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if (SVN_VERSION)
if (BUILD_METADATA)
set(LIBOFD_VERSION ${LIBOFD_VERSION}.svn.r${SVN_VERSION})
else ()
set(LIBOFD_VERSION ${LIBOFD_VERSION}+svn.r${SVN_VERSION})
endif ()
endif ()
string(TIMESTAMP LIBOFD_BUILD_DATE "%Y-%m-%d %H:%M:%S")
message(STATUS "libofd version: ${LIBOFD_VERSION} built at ${LIBOFD_BUILD_DATE}")
configure_file(
config.h.in
config.h
@ONLY
)
include_directories(${LIBOFD_SRC_DIR})
if (MSVC)
configure_file(
version.rc.in
version.rc
@ONLY
)
add_library(${LIBOFD_BINARY} SHARED ${LIBOFD_SOURCES} "${LIBOFD_SRC_DIR}/version.rc")
set_target_properties(${LIBOFD_BINARY} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:MSVCRT")
else ()
add_library(${LIBOFD_BINARY} SHARED ${LIBOFD_SOURCES})
endif ()
add_library(${LIBOFD_BINARY}_static STATIC ${LIBOFD_SOURCES})
target_link_libraries(${LIBOFD_BINARY} ${LIBOFD_DEPENDENCY})
target_include_directories(${LIBOFD_BINARY} PRIVATE "${LIBOFD_INCLUDEDIR}")
set_target_properties(${LIBOFD_BINARY} PROPERTIES PUBLIC_HEADER "${LIBOFD_INCLUDEDIR}/libofd/libofd.h")
include(GNUInstallDirs)
install(TARGETS ofd ofd_static
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libofd/
)
src/config.h.in
#ifndef LIBOFD_SRC_CONFIG_H_IN_
#define LIBOFD_SRC_CONFIG_H_IN_
#cmakedefine LIBOFD_VERSION "@LIBOFD_VERSION@"
#define LIBOFD_VERSION_W L"@LIBOFD_VERSION@"
const char * LIBOFD_VER = "libofd version: @LIBOFD_VERSION@ built at @LIBOFD_BUILD_DATE@";
#endif // LIBOFD_SRC_CONFIG_H_IN_
src/version.rc.in
1 VERSIONINFO FILEVERSION @LIBOFD_RC_VERSION@ PRODUCTVERSION @LIBOFD_RC_VERSION@ BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", " " VALUE "FileVersion", "@LIBOFD_VERSION@ " VALUE "InternalName", "@CMAKE_PROJECT_NAME@ " VALUE "LegalCopyright", "Copyright (C) 2021 " VALUE "OriginalFilename", " " VALUE "ProductName", "@CMAKE_PROJECT_NAME@ " VALUE "ProductVersion", "@LIBOFD_VERSION@ " END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END
tst/CMakeList.txt
set(BINARY ${CMAKE_PROJECT_NAME}_tst)
file(GLOB_RECURSE TEST_SOURCES LIST_DIRECTORIES false *.h *.cpp)
set(SOURCES ${TEST_SOURCES})
add_executable(${BINARY} ${TEST_SOURCES})
add_test(NAME ${BINARY} COMMAND ${BINARY})
target_link_libraries(${BINARY} PUBLIC ${CMAKE_PROJECT_NAME}_static ${LIBOFD_DEPENDENCY} gtest)
Get version information on linux
strings libofd.so | grep libofd version