CMakeList.txt

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", "\0"
            VALUE "FileVersion", "@LIBOFD_VERSION@\0"
            VALUE "InternalName", "@CMAKE_PROJECT_NAME@\0"
            VALUE "LegalCopyright", "Copyright (C) 2021\0"
            VALUE "OriginalFilename", "\0"
            VALUE "ProductName", "@CMAKE_PROJECT_NAME@\0"
            VALUE "ProductVersion", "@LIBOFD_VERSION@\0"
        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

 

posted @ 2021-03-30 07:52  Bob-wei  阅读(179)  评论(0编辑  收藏  举报