public:it:cmake

这是本文档旧的修订版!


CMake

  • Official Site:cmake.org
  • c++跨平台构建工具,开源[BSD]免费。
  • MSVC中, cmake 默认生成的 release 工程不生成 pdb 文件,可如下添加
    if (MSVC)
        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
        # if build .exe  
        set(CMAKE_EXE_LINKER_FLAGS_RELEASE"${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" CACHE STRING "" FORCE)
        # if build .dll   
        set(CMAKE_SHARED_LINKER_FLAGS_RELEASE  "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" CACHE STRING "" FORCE)
        # if build static .lib 
        set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" CACHE STRING "" FORCE)
    endif (MSVC)

    参考 https://cmake.org/cmake/help/latest/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.html

  • 给dll右键属性的详细信息里添加git version
    add_definitions(-DMAIN_PROJECT_NAME=\"${YourProjName}\")
    find_package(Git QUIET)
    if(GIT_FOUND)
        set(COMMIT_HASH "")
        set(BRANCH_NAME "")
        execute_process(
            COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%H
            OUTPUT_VARIABLE COMMIT_HASH
            OUTPUT_STRIP_TRAILING_WHITESPACE
            ERROR_QUIET
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        )
        execute_process(
            COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD
            OUTPUT_VARIABLE BRANCH_NAME
            OUTPUT_STRIP_TRAILING_WHITESPACE
            ERROR_QUIET
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        )
        message(STATUS "Git version is ${BRANCH_NAME}:${COMMIT_HASH}")
        add_definitions(-DGIT_COMMIT_HASH=\"${COMMIT_HASH}\")
        add_definitions(-DGIT_BRANCH_NAME=\"${BRANCH_NAME}\")
    endif()

    然后添加VersionInfo.rc

    #if (defined GIT_COMMIT_HASH && defined GIT_BRANCH_NAME)
    #define PRODUCT_VERSION GIT_BRANCH_NAME ":" GIT_COMMIT_HASH
    #else
    #define PRODUCT_VERSION "1.0.2"
    #endif //  GIT_COMMIT_HASH && GIT_BRANCH_NAME
    
    #ifndef MAIN_PROJECT_NAME
    #define MAIN_PROJECT_NAME "MyLib"
    #endif
    
    1 VERSIONINFO
    	FILEVERSION 1,0,0,1
    	PRODUCTVERSION 1,0,0,1
    	FILEFLAGSMASK 0x17L
    #ifdef _DEBUG
    	FILEFLAGS 0x1L
    #else
    	FILEFLAGS 0x0L
    #endif
    	FILEOS 0x4L
    	FILETYPE 0x0L
    	FILESUBTYPE 0x0L
    BEGIN
    	BLOCK "StringFileInfo"
    	BEGIN
    		BLOCK "040904b0"
    		BEGIN
    			VALUE "FileDescription", MAIN_PROJECT_NAME " Binary"
    			VALUE "FileVersion", "1.0.0.1"
    			VALUE "InternalName", MAIN_PROJECT_NAME
    			VALUE "LegalCopyright", "Copyright (C) 2020 "
    			VALUE "OriginalFilename", MAIN_PROJECT_NAME ".dll"
    			VALUE "ProductName", MAIN_PROJECT_NAME
    			VALUE "ProductVersion", PRODUCT_VERSION
    		END
    	END
    	BLOCK "VarFileInfo"
    	BEGIN
    		VALUE "Translation", 0x409, 1200
    	END
    END
  • public/it/cmake.1604901541.txt.gz
  • 最后更改: 2020/11/09 13:59
  • oakfire