任何项目都适用的CMakeLists配置
聲明下:本人想把CMakeLists中的內容寫好,csdn格式化了,無能為力,以下是本人在生產環境中已經使用過了。
測試代碼:
#include
int main()
{
//不支持linux
//#ifndef _DEBUG
#ifndef DEBUG
std::cout << “release” << std::endl;
#else
std::cout << “debug” << std::endl;
#endif
}
使用命令
cmake -DCMAKE_BUILD_TYPE=Debug … //編譯出debug版本
cmake -DCMAKE_BUILD_TYPE=Release … //編譯出release版本
以下是CMakeLists的編寫
#Cmake最低版本要求
cmake_minimum_required(VERSION 3.10.0)
#設置編譯進程名字
set(project_name name)
project(${project_name})
#設置版本號 1.0.1
set (VERSION_MAJOR 1)
set (VERSION_MINOR 0)
set (VERSION_PATCH 1)
#取消第三方庫頭文件進行依賴檢查,liunx加快編譯速度
set(CMAKE_DEPENDS_IN_PROJECT_ONLY ON)
#輸出編譯器的類型
if(CMAKE_CONFIGURATION_TYPES)
message("–Multi-configuration generator")
else()
message("----Single-configuration generator")
endif()
#默認開啟Debug
#liunx下是not,注意為空格式
if(NOT CMAKE_BUILD_TYPE OR “CMAKEBUILDTYPE"MATCHES"None"OR"{CMAKE_BUILD_TYPE}" MATCHES "None" OR "CMAKEB?UILDT?YPE"MATCHES"None"OR"{CMAKE_BUILD_TYPE}” MATCHES " “)
set(CMAKE_BUILD_TYPE “Debug” CACHE STRING “Build configuration” FORCE)
message(”----CMAKE_BUILD_TYPE FORCE SET Debug")
else()
#校驗
if("CMAKEBUILDTYPE"MATCHES"Release"OR"{CMAKE_BUILD_TYPE}" MATCHES "Release" OR "CMAKEB?UILDT?YPE"MATCHES"Release"OR"{CMAKE_BUILD_TYPE}" MATCHES “RelWithDebInfo” OR “CMAKEBUILDTYPE"MATCHES"MinSizeRel"OR"{CMAKE_BUILD_TYPE}" MATCHES "MinSizeRel" OR "CMAKEB?UILDT?YPE"MATCHES"MinSizeRel"OR"{CMAKE_BUILD_TYPE}” MATCHES “Debug”)
set(CMAKE_BUILD_TYPE “${CMAKE_BUILD_TYPE}”)
message("----set CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
else()
message("----CMAKE_BUILD_TYPE is not right")
endif()
endif()
#檢測linux下c++編譯版版本
if(CMAKE_SYSTEM_NAME MATCHES “Linux”)
include(CheckCXXCompilerFlag)
foreach(cxx_feature_name “c++14” “c++1y” “c++11” “c++0x”)
set(cxx_feature_flag “-std=${cxx_feature_name}”)
string(REPLACE “+” “x” cxx_feature_suffix cxxfeaturename)CHECKCXXCOMPILERFLAG({cxx_feature_name}) CHECK_CXX_COMPILER_FLAG(cxxf?eaturen?ame)CHECKC?XXC?OMPILERF?LAG({cxx_feature_flag} COMPILER_SUPPORTS_KaTeX parse error: Expected group after '_' at position 47: …MPILER_SUPPORTS_?{cxx_feature_suffix})
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} ${cxx_feature_flag}”)
message("-- The compiler ${BUILDTOOL_PREFIX}-g++ has ${cxx_feature_name} support")
break()
endif()
endforeach()
endif()
#設置編譯器格式
if (MSVC)
if (MSVC_VERSION LESS 1900)
message("— less vs2015 version")
endif()
else ()
#設置c++編輯器
set(CMAKAE_CXX_COMPILER g++)
if(NOT CMAKE_SYSTEM_NAME MATCHES “Linux”)
set(make_mode c++14)
message("-- set makemodemakemode")set(CMAKECXXFLAGS?std={make_mode} make mode") set(CMAKE_CXX_FLAGS -std=makem?odemakemode")set(CMAKEC?XXF?LAGS?std={make_mode})
endif()
#設置C++編輯選項
set(CMAKE_CXX_FLAGS “CMAKECXXFLAGS?g?W?fpic?fPIC?lssl?lcrypto?ldl?lpthread?lboostsystem?lboostregex?lboostlocale?lboosttimer""?lboostlogsetup?lboostlog?lboostthread?lboostcoroutine?lboostdatetime?lboostfilesystem?lboostserialization?lboostprogramoptions")if(CMAKESIZEOFVOIDPEQUAL8)set(CMAKECXXFLAGS"{CMAKE_CXX_FLAGS} -g -W -fpic -fPIC -lssl -lcrypto -ldl -lpthread -lboost_system -lboost_regex -lboost_locale -lboost_timer" "-lboost_log_setup -lboost_log -lboost_thread -lboost_coroutine -lboost_date_time -lboost_filesystem -lboost_serialization -lboost_program_options") if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(CMAKE_CXX_FLAGS "CMAKEC?XXF?LAGS?g?W?fpic?fPIC?lssl?lcrypto?ldl?lpthread?lboosts?ystem?lboostr?egex?lboostl?ocale?lboostt?imer""?lboostl?ogs?etup?lboostl?og?lboostt?hread?lboostc?oroutine?lboostd?atet?ime?lboostf?ilesystem?lboosts?erialization?lboostp?rogramo?ptions")if(CMAKES?IZEOFV?OIDP?EQUAL8)set(CMAKEC?XXF?LAGS"{CMAKE_CXX_FLAGS} -m64”)
else()
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -m32”)
endif()
if(${CMAKE_BUILD_TYPE} MATCHES “Debug”)
message("-- CMAKE_BUILD_TYPE is KaTeX parse error: Expected 'EOF', got '#' at position 28: …_TYPE} mode") #?設置C++debug版本編輯選…ENV{CXXFLAGS} -O0 -DDEBUG -D_DEBUG -ggdb")
else()
message("-- CMAKE_BUILD_TYPE is KaTeX parse error: Expected 'EOF', got '#' at position 28: …_TYPE} mode") #?設置C++release編輯選…ENV{CXXFLAGS} -O3 -g1 -DNDEBUG -DN_DEBUG")
endif()
endif ()
#第三方庫搜索頭文件
include_directories(/usr/local/include)
#第三方庫的lib
link_directories(/usr/local/lib)
link_directories(/usr/lib64)
include_directories( ${CMAKE_SOURCE_DIR}/src )
#可執行文件生成位置
set(EXECUTABLE_OUTPUT_PATH “${CMAKE_SOURCE_DIR}/bin”)
file(GLOB SOURCE_MAIN “${CMAKE_SOURCE_DIR}/src/*.cpp”)
add_executable("${PROJECT_NAME}" ${SOURCE_MAIN})
set(OPENSSL_USE_STATIC_LIBS TRUE)
#添加鏈接庫 靜態庫
target_link_libraries("${PROJECT_NAME}"libssl.a libcrypto.a)
總結
以上是生活随笔為你收集整理的任何项目都适用的CMakeLists配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jquery 获取select选中的va
- 下一篇: SpringSecurity +Jwt