日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

任何项目都适用的CMakeLists配置

發(fā)布時(shí)間:2025/3/11 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任何项目都适用的CMakeLists配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明下:本人想把CMakeLists中的內(nèi)容寫好,csdn格式化了,無能為力,以下是本人在生產(chǎn)環(huán)境中已經(jīng)使用過了。

測(cè)試代碼:
#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)

#設(shè)置編譯進(jìn)程名字
set(project_name name)

project(${project_name})

#設(shè)置版本號(hào) 1.0.1
set (VERSION_MAJOR 1)
set (VERSION_MINOR 0)
set (VERSION_PATCH 1)

#取消第三方庫頭文件進(jìn)行依賴檢查,liunx加快編譯速度
set(CMAKE_DEPENDS_IN_PROJECT_ONLY ON)

#輸出編譯器的類型
if(CMAKE_CONFIGURATION_TYPES)
message("–Multi-configuration generator")
else()
message("----Single-configuration generator")
endif()

#默認(rèn)開啟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()
#校驗(yàn)
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()

#檢測(cè)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()

#設(shè)置編譯器格式
if (MSVC)
if (MSVC_VERSION LESS 1900)
message("— less vs2015 version")
endif()

add_definitions(-D_CRT_SECURE_NO_WARNINGS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /O2 /bigobj")# was causing conflics with gtest build string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "")set(MSVC_RUNTIME_LIBRARY_CONFIG "/MT") endif ()foreach (flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)if ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MT")string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")elseif ("${MSVC_RUNTIME_LIBRARY_CONFIG}" STREQUAL "/MD")string(REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")else ()string(REPLACE "/MD" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")string(REPLACE "/MT" "${MSVC_RUNTIME_LIBRARY_CONFIG}" ${flag_var} "${${flag_var}}")endif () endforeach ()#增加宏定義 #add_definitions(-DTEST) #add_definitions(-DUNICODE) #add_definitions(-DWIN32_LEAN_AND_MEAN)

else ()
#設(shè)置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()
#設(shè)置C++編輯選項(xiàng)
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") #?設(shè)置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") #?設(shè)置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 )

#可執(zhí)行文件生成位置
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)
#添加鏈接庫 靜態(tài)庫
target_link_libraries("${PROJECT_NAME}"libssl.a libcrypto.a)

總結(jié)

以上是生活随笔為你收集整理的任何项目都适用的CMakeLists配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。