mysql 源码编绎修改 FLAGS,调试MYSQL

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

If you set flags that affect optimization (-Onumber), you must set the CMAKE_C_FLAGS_build_type and/or CMAKE_CXX_FLAGS_build_type options, wherebuild_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"

红色的部分要一致

http://blog.csdn.net/fan_hai_ping/article/details/42524205
构建类型
CMake 为我们提供了四种构建类型:

Debug

Release

MinSizeRel

RelWithDebInfo

如果使用 CMake 为 Windows MSVC 生成 projects/workspaces 那么我们将得到上述的 4 种解决方案配置。

如果使用 CMake 生成 Makefile 时,我们需要做一些不同的工作。CMake 中存在一个变量 CMAKE_BUILD_TYPE 用于指定构建类型,此变量只用于基于 make 的生成器。我们可以这样指定构建类型:

$ CMake -DCMAKE_BUILD_TYPE=Debug .

这里的 CMAKE_BUILD_TYPE 的值为上述的 4 种构建类型中的一种。

编译和链接标志
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})

第 5 和 6 行设置了两个变量 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=1

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 平台,我们可以通过编译器标志(选项)来控制进行 32 位还是 64 位构建。

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=1.

ifeq ($(RELEASE),0)

   CFLAGS += -g

else

    #release

   CFLAGS += -static -O3 -DNDEBUG

   LFLAGS += -static

endif

# [args] 程序位数. 32代表32位程序, 64代表64位程序, 其他默认. makeBITS=32.

ifeq ($(BITS),32)

   CFLAGS += -m32

   LFLAGS += -m32

else

    ifeq($(BITS),64)

       CFLAGS += -m64

       LFLAGS += -m64

   else

   endif

endif


时间: 2024-08-12 00:30:57

mysql 源码编绎修改 FLAGS,调试MYSQL的相关文章

Mysql源码方式安装与完全卸载Mysql

1.基础环境介绍 1.1软件环境 操作系统:redhat linux 6.3 Mysql版本:Mysql 5.6.24 1.2磁盘目录规划 序号 目录 用途 1 /opt/mysql/mysql-5.6.24 mysql主程序安装目录 2 /data/mysql/mysql_5624/{data,tmp,logs} 存放数据文件.临时文件.日志文件,5624代表为5.6.24版本号 2.linux环境调整优化 2.1 关闭NUMA 编辑/etc/grub.conf文件,在kernel后面增加 n

mysql源码包安装(适用于多个mysql)

1.安装编译代码需要的包: yum list|grep ncurses-devel yum -y install make gcc-c++ cmake bison-devel ncurses-devel 2.下载MySQL 5.6.35 wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.35.tar.gz tar zxvf mysql-5.6.35.tar.gz cd mysql-5.6.35 3.目录创建(-p父目录不存在则创建

mysql 源码调试方法

http://blog.itpub.net/29254281/viewspace-1847415/ 其中吕海波老师分享的内容是 <调试Oracle二三例:调试技术在日常运维中的应用>其中有关于调试MySQL源码的内容. 实验如下:下载MySQL 5.7的源码http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.9.tar.gz 编译,注意增加 DEBUG 选项.(cmake的版本要求在2.8.2以上)cmake \-DCMAKE_INSTALL

Win7+VS2010:mysql 源码编译与调试

win7+vs2010源码编译mysql 最近由于在实习,工作重点在于一些数据库的开发,为了更好的理解数据库的实现机制,目前萌生了要研究一下mysql数据库源码的想法.那么好吧,说干就干,首先我们需要实现对源码的编译,这里我们选择win7+VS2010来实现,但是试了很多次都失败了.这是我多次配置环境时遇到的问题,各种博客文章总是不太完全,或者说没有说明一些遇到的问题的解决方案,这可能跟具体的操作系统和环境有关.本文就说说我安装的情况. 1. 准备工作 (1)OS:win7 旗舰版 64位 + 

Linux(CentOS或RadHat)下MySQL源码安装

安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake  :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本.bison  :MySQL语法解析器需要使用bison进行编译.ncurses-devel :用于终端操作的开发包.zlib    :MySQL使用zlib进行压缩 有关库包下载: 可以自己去官网下载,也可以去网盘下载 http://pan.baidu.co

MySQL源码编译安装

1.安装cmake-2.8.10.2.tar.gz 以root用户进入shell #tar -zxvf  cmake-2.8.10.2.tar.gz #cd cmake-2.8.10.2 #./configure #make                         (无法make,检测gcc编译环境) #make install --------------------------------- 2.安装ncurses-5.9.tar.gz #tar -zxvf  ncurses-5.9

MySQL源码:索引相关的数据结构

http://www.orczhou.com/index.php/2012/11/mysql-source-code-data-structure-about-index/ 本文将尝试介绍MySQL索引存储相关的数据结构.程序=数据结构+算法,了解数据结构,然后就可以进一步了解MySQL源码中如何使用索引,如何选择自己的执行计划. 目录 [hide] 1. MySQL如何描述某个数据表的索引 2. GDB打印观察索引信息 2.1 打印索引基本信息 2.2 打印索引某一列的基本信息 2.3 打印索

mysql源码安装(5.1)

下载mysql源码包并解压.wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73.tar.gztar -zxvf mysql-5.1.73cd mysql-5.1.73 创建用户.basedir datadiruseradd -s /sbin/nologin  mysqlmkdir -p /usr/local/mysqlmkdir -p /data/mysqlchown mysql /data/mysql 编译前的参数配置.

CentOS 7运维管理笔记(10)----MySQL源码安装

MySQL可以支持多种平台,如Windows,UNIX,FreeBSD或其他Linux系统.本篇随笔记录在CentOS 7 上使用源码安装MySQL的过程. 1.下载源码 选择使用北理工的镜像文件: 在CentOS 7 中输入如下命令: [[email protected]:~/Downloads] # wget http://mirror.bit.edu.cn/mysql/Downloads/MySQL-5.6/mysql-5.6.31.tar.gz 2.解压mysql源码压缩文件,并更新软件