mysql 源码编绎修改 FLAGS,调试MYSQL
http://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html#option_cmake_cmake_c_flags
To specify your own C and C++ compiler flags, for flags that do not affect optimization, use the CMAKE_C_FLAGS
and CMAKE_CXX_FLAGS
CMake options.
When providing your own compiler flags, you might want to specify CMAKE_BUILD_TYPE
as well.
For example, to create a 32-bit release build on a 64-bit Linux machine, do this:
shell>mkdir bld
shell>cd bld
shell>cmake .. -DCMAKE_C_FLAGS=-m32 \
-DCMAKE_CXX_FLAGS=-m32 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
CMAKE_BUILD_TYPE:四种 [Debug,Release,MinSizeRel,RelWithDebInfo]
CMAKE_C_FLAGS 或CMAKE_CXX_FLAGS 可以指定编译标志
C编译标志相关变量:
CMAKE_C_FLAGS
CMAKE_C_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] C++ 编译标志相关变量:
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
If you set flags that affect optimization (-O
), you must set the number
CMAKE_C_FLAGS_
and/or build_type
CMAKE_CXX_FLAGS_
options, wherebuild_type
build_type
corresponds to the CMAKE_BUILD_TYPE
value. To specify a different optimization for the default build type (RelWithDebInfo
) set theCMAKE_C_FLAGS_RELWITHDEBINFO
and CMAKE_CXX_FLAGS_RELWITHDEBINFO
options. For example, to compile on Linux with -O3
and with debug symbols, do this:
shell>cmake .. -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g" \
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g" 红色的部分要一致
set(CMAKE_C_FLAGS ”-std=c99 -O2 -pipe -Wall -Wextra”)
set(CMAKE_C_FLAGS_DEBUG ”${CMAKE_C_FLAGS} -g -ggdb -pg”)
set(CMAKE_C_FLAGS_RELEASE ”${CMAKE_C_FLAGS} -s -DNDEBUG”)
http://blog.csdn.net/fan_hai_ping/article/details/42524205
构建类型
CMake 为我们提供了四种构建类型: Debug Release MinSizeRel RelWithDebInfo 如果使用 CMake 为 Windows MSVC 生成 projects/workspaces 那么我们将得到上述的 种解决方案配置。 如果使用 CMake 生成 Makefile 时,我们需要做一些不同的工作。CMake 中存在一个变量 CMAKE_BUILD_TYPE 用于指定构建类型,此变量只用于基于 make 的生成器。我们可以这样指定构建类型: $ CMake -DCMAKE_BUILD_TYPE=Debug . 这里的 CMAKE_BUILD_TYPE 的值为上述的 种构建类型中的一种。 编译和链接标志
C 编译标志相关变量:
CMAKE_C_FLAGS
CMAKE_C_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] C++ 编译标志相关变量:
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
CMAKE_C_FLAGS 或CMAKE_CXX_FLAGS 可以指定编译标志 CMAKE_C_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]或
CMAKE_CXX_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] 则指定特定构建类型的编译标志,这些编译标志将被加入到 CMAKE_C_FLAGS 或 CMAKE_CXX_FLAGS 中去,例如,如果构建类型为 DEBUG,那么 CMAKE_CXX_FLAGS_DEBUG 将被加入到 CMAKE_CXX_FLAGS中去 链接标志相关变量:
CMAKE_EXE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] CMAKE_MODULE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] CMAKE_SHARED_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] 它们类似于编译标志相关变量 生成Debug和Release版本
在 Visual Studio 中我们可以生成 debug 版和 release 版的程序,使用 CMake 我们也可以达到上述效果。debug 版的项目生成的可执行文件需要有调试信息并且不需要进行优化,而 release 版的不需要调试信息但需要优化。这些特性在 gcc/g++ 中是通过编译时的参数来决定的,如果将优化程度调到最高需要设置参数-O3,最低是 -O0 即不做优化;添加调试信息的参数是 -g -ggdb ,如果不添加这个参数,调试信息就不会被包含在生成的二进制文件中。 CMake 中有一个变量CMAKE_BUILD_TYPE ,可以的取值是 Debug、Release、RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG中的字符串作为编译选项生成Makefile ,当这个变量值为 Release 的时候,工程会使用变量 CMAKE_CXX_FLAGS_RELEASE 和CMAKE_C_FLAGS_RELEASE 选项生成 Makefile。 示例: PROJECT(main) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_SOURCE_DIR .) SET(CMAKE_CXX_FLAGS_DEBUG"$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE"$ENV{CXXFLAGS} -O3 -Wall") AUX_SOURCE_DIRECTORY(. DIR_SRCS) ADD_EXECUTABLE(main ${DIR_SRCS}) 第 和 行设置了两个变量 CMAKE_CXX_FLAGS_DEBUG 和CMAKE_CXX_FLAGS_RELEASE, 这两个变量是分别用于 debug 和 release 的编译选项。编辑 CMakeList.txt 后需要执行 ccmake 命令生成 Makefile 。在进入项目的根目录,输入 "ccmake ." 进入一个图形化界面。 编译32位和64位程序
对于 Windows MSVC,我们可以设定 CMake Generator 来确定生成 Win32 还是 Win64 工程文件,例如: # 用于生成 Visual Studio 10Win64 工程文件 CMake -G "Visual Studio 10 Win64" # 用于生成 Visual Studio 10Win32 工程文件 CMake -G "Visual Studio 10" 我们可以通过 CMake --help 来查看当前平台可用的 Generator。 CMake .. -DUSE_32BITS= if(USE_32BITS) message(STATUS "Using 32bits") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-m32") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}-m32") else() endif(USE_32BITS) 对于 UNIX 和类 UNIX 平台,我们可以通过编译器标志(选项)来控制进行 位还是 位构建。 GCC命令行参数 32位版:加上 -m32 参数,生成32位的代码。 64位版:加上 -m64 参数,生成64位的代码。 debug版:加上 -g 参数,生成调试信息。 release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3 参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。 当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如—— 32位Linux下的GCC,默认是编译为32位代码。 64位Linux下的GCC,默认是编译为64位代码。 Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码。 Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下。 Makefile文件中的示例: # [args] 生成模式. 0代表debug模式, 1代表release模式. makeRELEASE=. ifeq ($(RELEASE),) CFLAGS += -g else #release CFLAGS += -static -O3 -DNDEBUG LFLAGS += -static endif # [args] 程序位数. 32代表32位程序, 64代表64位程序, 其他默认. makeBITS=. ifeq ($(BITS),) CFLAGS += -m32 LFLAGS += -m32 else ifeq($(BITS),) CFLAGS += -m64 LFLAGS += -m64 else endif endif
mysql 源码编绎修改 FLAGS,调试MYSQL的更多相关文章
- 源码编绎的时候报错 tengine-2.1.0 error: the HTTP rewrite module requires the PCRE library.
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the mo ...
- mysql 源码调试方法
http://blog.itpub.net/29254281/viewspace-1847415/ 其中吕海波老师分享的内容是 <调试Oracle二三例:调试技术在日常运维中的应用>其中 ...
- 02.LNMP架构-MySQL源码包编译部署详细步骤
操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:Cmake+Boost+MySQL 操作步骤: 一.安装依赖组件 [root@localhost ~]# yum -y ...
- 51ak带你看MYSQL5.7源码3:修改代码实现你的第一个Mysql版本
从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...
- MySQL源码分析以及目录结构 2
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
- MySQL源码分析以及目录结构
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
- Linux(CentOS或RadHat)下MySQL源码安装
安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake :MySQL 5.5开始,使用cmake进 ...
- Dubbo入门到精通学习笔记(十九):MySQL源码编译安装、MySQL主从复制的配置
文章目录 MySQL 源码编译安装(CentOS-6.6+MySQL-5.6) 一.服务器配置: 二.源码安装 MySQL5.6.26: MySQL主从复制的配置 环境 依赖课程 MySQL 主从复制 ...
- mysql源码解读之配置文件
要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴.搭建mysql调试环境很简单,从官方下载mysql源码,利用cmake工具生成工程即可.为了方便 ...
随机推荐
- http知识累积
1. http头 Host, Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的. 如果有黑客劫持了用户的请求,篡改了Host的内容,当请求到 ...
- Java实现Http服务器(四)
(1)HTTPServer的监听启动 sun.net.httpserver.ServerImpl类中启动了Socket监听,ServerImpl的内部类Dispatch类启动了Http服务器的监听 / ...
- commons-lang阅读(一)
基于commons-lang-2.4.jar org.apache.commons.lang.time.DateFormatUtils类 package org.apache.commons.lang ...
- 转:阿里开源Mysql分布式中间件:Cobar
原文来自于:http://hualong.iteye.com/blog/2102798 这几天研究了下Cobar, Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoeba的升级版,该产品成 ...
- jQuery Mobile 控制 select 的显示隐藏 display none
如需要动态控制下拉选择菜单select的显隐,一般考虑使用display:none这个方法. 但在jQueryMobile中的select添加自定义的css,display:none 是无效的. 解决 ...
- SQL server 连接查询
1.join on 左右拼接查询 2.union 上下拼接 注意:所拼接的列的数据类型要一致
- Bluetooth LE(低功耗蓝牙) - 第一部分
前言 在写这篇文章的时候,谷歌刚刚发布了Android Wear ,摩托罗拉也发布了 Moto 360 智能手表.Android Wear的API还是相当基本的,是很好的文档材料,而且还会不断的更新, ...
- nodejs之日志管理
开发一个项目时,可以通过控制台输出或者debug来获取到项目的运行信息.当项目上线时,我们就需要通过日志来分析.如同Java的log4j,nodejs中也有相关的log4js.使用过log4j的同学应 ...
- 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)
J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│ 第一讲1.1C语言第一阶段.mp4│ 第二讲1.2c语言入门教程.mp4 ...
- redis3.0集群使用发现的一些问题
1.看了官方文档,没有发现有关整个集群关闭再启动的方法.集群是多机器多节点运行,一般情况不可能出现所有机器都挂掉.但万一同时挂掉,数据丢失的可能性就极大了. 验证方法:手动关闭了集群中所有节点,然后再 ...