声明下:本人想把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()

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 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配置相关推荐

  1. 解决idea中每次创建项目都要重复配置maven,全网几步配置

    你是不是idea每次创建项目都要重新配置maven呢?为啥呢老憋屈了. 因为你之前的每一次的maven配置都是在项目中去配置的 ,所以只会在本项目中生效.也就是说在项目中配置的是局部配置. 我们需要一 ...

  2. 很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置 文件内容的对象,则在系统运行中,有 很多地方都需

      很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据.   如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象,则在系统运行中,有很多地方 ...

  3. pycharm配置python第三方库_解决pycharm每次新建项目都要重新安装一些第三方库的问题...

    目前有三个解决办法,也是亲测有用的: 第一个方法: 因为之前有通过pycharm的project interpreter里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项 ...

  4. 怎么把python解释器配置在pycharm中_在PyCharm中配置项目(三):配置Python解释器...

    PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发. PyCha ...

  5. 这个开源组织里的项目都是精品

    前言 在开源中国里,不知道大家有没有留意到一个Java开源组织--Dromara? 这个组织是由Apache ShenYu(前身是Soul网关)的作者创立,多位Java开源作者参与的一个Java开源组 ...

  6. 读了鸿蒙 OS 的代码后,我发现优秀项目都有这个共性!

    作者 | 马超 责编 | 胡巍巍 出品 | 程序人生(ID:coder_life) 最近有人在Github上开源了鸿蒙OS(https://www.github.com/Awesome-Harmony ...

  7. 项目Wiki的选择和配置

    项目Wiki的选择和配置 项目组内部使用的wiki终于创建成功了!因为要开始一个新的重要项目,所以要开始用正规方法来进行项目管理.为了保证项目内部沟通的畅通,所以我们需要选择一个wiki来进行内部文档 ...

  8. 鸿蒙支持lOS,读了鸿蒙 OS 的代码后,我发现优秀项目都有这个共性!

    最近有人在Github上开源了鸿蒙OS(https://www.github.com/Awesome-HarmonyOS)并且累计获得了一万多颗Star.从华为的官方宣传中就提到了"安卓总代 ...

  9. 开源知识管理系统_半个月收获接近 1k 的点赞!你需要的开源项目都在这里

    半个月前,我开源了awesome-java ,这是一个 Github 上非常棒的 Java 开源项目集合.是的!就是下面这个这么骚的图标! 项目地址在这里:https://github.com/Sna ...

最新文章

  1. jQuery中getJSON跨域原理详解
  2. 浅谈ASP.NET的内部机制(一)
  3. Oracle作业队列入门图文解说
  4. HTML5 音频audio 和视频video实用基础教程
  5. solr5.5索引mysql数据(新手总结)
  6. 金币问题c语言程序,【求助】急请c语言高手帮忙解决程序问题(问题已经被我自己解决,金币送给自己啦)...
  7. 计算机网络课程设计之网络嗅探器的设计与实现
  8. html5拖拽图片批量ajax无刷新进度上传
  9. php 5.5.1,PHP5.3.1 不再支持ISAPI
  10. 《机器学习》瓜书—周志华
  11. 大白话解析模拟退火算法、遗传算法
  12. 软件著作权人享有的权利
  13. 关于社会工程学的利用
  14. 个人搭建网站主要流程以及六个基本步骤
  15. 零基础学VB6.0仿真:用四阶龙格库塔法计算传递函数状态方程的结果
  16. Python3从搜狐国际新闻抓取---完整版
  17. 美业SaaS的创业分享之[技术]:产品研发和架构在组织管理中的挑战
  18. CDA Level1知识点总结之数据分析概述与职业操守
  19. python+selenium+pycharm自动化测试环境搭建
  20. 芒格最新演讲:中国的水有些聪明人已经蹚进去了,时候到了更多人会进场

热门文章

  1. 性能测试调优篇---未完待续
  2. Erlang/Elixir 社区摘要: 2016-05-21
  3. char与varchar区别(MYISAM)
  4. 用JavaScript嵌入你的SWF
  5. ORA-01502 state unusable错误成因和解决方法[转]
  6. java tomcat重启linux_Linux下tomcat重启
  7. 快学Scala习题解答—第二章 控制结构和函数
  8. 隐藏域input里面放当前时间_【小A问答】Win10的隐藏小秘密,被我发现了!
  9. 终端不能联网_5G和物联网DDA的关系
  10. 处于停机等非正常状态_一文聊透 Dubbo 优雅停机