任何项目都适用的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 "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("CMAKEBUILDTYPE"MATCHES"Release"OR"{CMAKE_BUILD_TYPE}" MATCHES "Release" OR "CMAKEBUILDTYPE"MATCHES"Release"OR"{CMAKE_BUILD_TYPE}" MATCHES “RelWithDebInfo” OR “CMAKEBUILDTYPE"MATCHES"MinSizeRel"OR"{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 cxxfeaturename)CHECKCXXCOMPILERFLAG({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 makemodemakemode")set(CMAKECXXFLAGS−std={make_mode} make mode") set(CMAKE_CXX_FLAGS -std=makemodemakemode")set(CMAKECXXFLAGSstd={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 "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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入 Apache Kylin Cube 与查询优化

2019独角兽企业重金招聘Python工程师标准>>> 近几年&#xff0c;Apache Kylin作为一个高速的开源分布式大数据查询引擎正在迅速崛起。它充分发挥Hadoop、Spark、HBase等技术的优势&#xff0c;通过对超大规模数据集进行预计算&#xff0c;实现秒级甚至亚秒级的查询响…

关于lock_guard使用细节

c11之后新增的了lock_guard函数&#xff0c;使用起来比较方便&#xff0c;但难免会遇到很多坑&#xff0c;接下来&#xff0c;我就简单说一下&#xff1a; 1&#xff1a;如何自己实现一个mutex类的话&#xff0c;需要使用lock函数和unlock函数&#xff0c;而且名字要一模一样 2…

WPF的WebBrowser屏蔽弹出脚本错误窗口

WPF中使用System.Windows.Controls.WebBrowser时脚本错误会弹出提示框&#xff0c;但这个WebBrowser没有提供类似System.Windows.Forms.WebBrowser的ScriptErrorsSuppressed方法&#xff0c;于是MSDN上有了解决办法&#xff0c;但是试了试不行&#xff0c;改了下就可以啦&#…

混乱开发,既伤身体又伤感情

这几天读了些UML用户指南和设计模式面向对象开发&#xff0c;由于写了很长时间的程序&#xff0c;突然发现体力劳动越来越严重&#xff0c;情绪有些低落和凌乱。 实现虽然已经结束&#xff0c;可是竟然在不知不觉中留下了一丝软件开发的阴影。这几天很不情愿去写代码&#xff…

常见的排序算法二——希尔排序

原理&#xff1a;被称为增量缩小排序。先将序列按增量划分为元素个数相同的若干组&#xff0c; 使用直接插入排序法进行排序&#xff0c;然后不断缩小增量直至为1&#xff0c; 最后使用直接插入排序完成排序。 要点&#xff1a;增量的选择以及排序最终以1为增量进行排序结束。 …

Centos搭建SVN服务器及配置文件

2019独角兽企业重金招聘Python工程师标准>>> 1、安装 #yum install subversion 判断是否安装成功 yum安装结束时会显示版本 svnserve, version 1.6.11 (r934486) 出现上面的提示&#xff0c;说明安装成功。 有了SVN软件后还需要建立SVN库。 #mkdir /opt/svn/repos …

.Net Micro Framework导航总贴(新手必看)

一、什么是.Net Micro Framework它是一个.Net框架&#xff08;微型框架&#xff09;&#xff0c;也是一个嵌入式系统OS&#xff0c;可以裸奔在ARM单片机上&#xff0c;也可以运行在别的嵌入式系统上。我们可以用VisualStudio C#开发代码&#xff0c;调用对应各种硬件的类库方法…

char数组拷贝wchar数组

std::string str “123”; size_t nDestSize mbstowcs(NULL, str.c_str(), 0) 1; //size_t nDestSize strlen(str.c_str()) 1; wchar_t* wchDest new wchar_t[nDestSize]; wmemset(wchDest, 0, nDestSize); mbstowcs(wchDest, str.c_str(), nDestSize); std::wstring wst…

IP地址查询接口及调用方法

为什么80%的码农都做不了架构师&#xff1f;>>> 设计蜂巢IP地址查询接口&#xff1a;http://www.hujuntao.com/api/ip/ip.php腾讯IP地址查询接口&#xff1a;http://fw.qq.com/ipaddress新浪IP地址查询接口&#xff1a;http://int.dpool.sina.com.cn/iplookup/iplo…

c++11或c++14或c++17参数包的使用

include //张开函数啦 template void display1(T a) { std::cout << a << std::endl; } template void display1() { std::cout << “void” << std::endl; } //逗号展开函数 template<typename Tvoid,typename … Args> void display1(T fi…

加解密技术(Cryptography)基本概念

转载自&#xff1a;http://www.cnblogs.com/piyeyong/archive/2010/06/10/1744692.html 要想实现在不安全的网络上的安全通信&#xff0c;需要考虑3个方面的问题&#xff1a;保密(Privacy)&#xff0c;认证(Authentication)&#xff0c;完整性(Integrity)。 1.保密(Privacy) 数…

select的列子说明select内部实现原理

1:select内部是个数组&#xff0c;而epoll内部结构是红黑二叉树 2&#xff1a;select查询起来慢&#xff0c;而epoll查询起来快 3:每次循环&#xff0c;内部都要发生拷贝&#xff08;查看相关代码&#xff09;而epoll不需要这样的操作,也就是初始化一次拷贝 #include #include&…

.NET配置文件读写实例(附SosoftConfigHelper类)

配置文件在软件开发中起到举足轻重的作用&#xff0c;可以说不可或缺。.NET程序可使用.config文件作为配置文件&#xff0c;例如WinForm程序的*.app.config、Web程序的web.config。.config文件是标准的XML文件。本实例可读取、修改和添加app.confing或者web.config文件的appSet…

关于shared_from_this的转换

声明&#xff1a;以下这函数&#xff0c;使用场景再lambda表达式中使用 std::weak_ptr<websockets_session> weak_self() { return std::weak_ptr<websockets_session>(shared_from_this()); }

HTML5标签

<header>主要用于导航&#xff0c;头部&#xff0c;可以嵌套&#xff0c;但不可以嵌套在<address>标签中。 <hgroup>在<header>里面定义具体内容的&#xff0c;是一个小容器。 <article></article>:大块文章&#xff0c;主要用于文字的显示…

多态的调用方法

1: 父类的指针指向子类的地址&#xff0c;然后调用虚函数 列子: #include<iostream> #include<memory> class A { public: A() default; virtual ~A() default; virtual void display() { std::cout << "A" <<…

spring security3 统计在线用户

首先&#xff0c;我们需要使得ConcurrentSessionFilter生效并在spring-security.xml配置。[html] view plaincopy<http auto-config"true" use-expressions"true"> <!-- Uncomment to limit the number of sessions a user can have --> …

node.js编程错误记录集

这是有关于我最近学习node.js中出现的错误的记录和纠正过程&#xff0c;因为我只是一名初学者&#xff0c;所以&#xff0c;遇到的错误可能真的是非常简单&#xff0c;如拼写错误等等&#xff0c;这些我当然是不会记录下来的&#xff0c;但是如果是一些我一时看不懂&#xff0c…

wstring和string简单正则表达式使用

std::regex e("([ ])3DSMAX(\d{4})_MAIN([^ ])"); //std::regex e("([^ ])3DSMAX(\d{4})_MAIN"); std::smatch sub_match; //从第一行中解析请求方法、路径和 HTTP 版本 std::string line “VRAY30_RT_FOR_3DSMAX2016_MAIN”; if (std::regex_match(line,…

【引用】phpmyadmin提示Access denied for user 'root'@'localhost' (using password: NO)的解决办法...

一、错误内容 今天用phpmyadmin连接mysql里面的某个数据库时时遇到了下面的提示&#xff1a; #1045 - Access denied for user rootlocalhost (using password: NO) phpMyAdmin 试图连接到 MySQL 服务器&#xff0c;但服务器拒绝连接。您应该检查 config.inc.php 中的主机、用户…