任何项目都适用的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 “ C M A K E B U I L D T Y P E " M A T C H E S " N o n e " O R " {CMAKE_BUILD_TYPE}" MATCHES "None" OR " CMAKEBUILDTYPE"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(" C M A K E B U I L D T Y P E " M A T C H E S " R e l e a s e " O R " {CMAKE_BUILD_TYPE}" MATCHES "Release" OR " CMAKEBUILDTYPE"MATCHES"Release"OR"{CMAKE_BUILD_TYPE}" MATCHES “RelWithDebInfo” OR “ C M A K E B U I L D T Y P E " M A T C H E S " M i n S i z e R e l " O R " {CMAKE_BUILD_TYPE}" MATCHES "MinSizeRel" OR " CMAKEBUILDTYPE"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 c x x f e a t u r e n a m e ) C H E C K C X X C O M P I L E R F L A G ( {cxx_feature_name}) CHECK_CXX_COMPILER_FLAG( cxxfeaturename)CHECKCXXCOMPILERFLAG({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()

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 ()
#设置c++编辑器
set(CMAKAE_CXX_COMPILER g++)

if(NOT CMAKE_SYSTEM_NAME MATCHES “Linux”)
set(make_mode c++14)
message("-- set m a k e m o d e m a k e m o d e " ) s e t ( C M A K E C X X F L A G S − s t d = {make_mode} make mode") set(CMAKE_CXX_FLAGS -std= makemodemakemode")set(CMAKECXXFLAGSstd={make_mode})
endif()
#设置C++编辑选项
set(CMAKE_CXX_FLAGS “ C M A K E C X X F L A G S − g − W − f p i c − f P I C − l s s l − l c r y p t o − l d l − l p t h r e a d − l b o o s t s y s t e m − l b o o s t r e g e x − l b o o s t l o c a l e − l b o o s t t i m e r " " − l b o o s t l o g s e t u p − l b o o s t l o g − l b o o s t t h r e a d − l b o o s t c o r o u t i n e − l b o o s t d a t e t i m e − l b o o s t f i l e s y s t e m − l b o o s t s e r i a l i z a t i o n − l b o o s t p r o g r a m o p t i o n s " ) i f ( C M A K E S I Z E O F V O I D P E Q U A L 8 ) s e t ( C M A K E C X X F L A G S " {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 " CMAKECXXFLAGSgWfpicfPIClssllcryptoldllpthreadlboostsystemlboostregexlboostlocalelboosttimer""lboostlogsetuplboostloglboostthreadlboostcoroutinelboostdatetimelboostfilesystemlboostserializationlboostprogramoptions")if(CMAKESIZEOFVOIDPEQUAL8)set(CMAKECXXFLAGS"{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)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹平华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值