Cmake的 debug和release

2023-05-16

Cmake的 debug版本和release版本(转)
 
debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化,而release版本的不需要调试信息但是需要优化。这些特性在gcc/g++中通过编译时的参数来决定的,如果将优化程度调到最高需要设置 -O3 ,最低的是 -O0 即不做优化,添加调试信息的参数是 -g  -ggdb,如果不添加这个参数,调试信息就不会被包含在生成的二进制中

CMake中有一个变量CMAKE_BUILD_TYPE,可以取值枚举入下:Debug   Release  RelWithDebInfo  和  MinSizeRel

当这个变量值为Debug的时候,Cmake会使用变量CMAKE_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG中的字符串作为编译选项生成Makefile,
 
当这个变量值为Release的时候,工程会使用变量CMAKE_CXX_FLAGS_RELEASE和CMAKE_CFLAGS_RELEASE选项生成Makefile。
现在假设项目中只有一个文件main.cpp,下面是一个可以选择生成debug版和release版的程序的CMakeList.txt:
1 PROJECT(main)
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
3 SET(CMAKE_SOURCE_DIR .)
45 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
6 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
78 AUX_SOURCE_DIRECTORY(. DIR_SRCS)
9 ADD_EXECUTABLE(main ${DIR_SRCS})

第 5 和 6 行设置了两个变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE, 这两个变量是分别用于 debug 和 release 的编译选项。 编辑 CMakeList.txt 后需要执行 ccmake 命令生成 Makefile 。在进入项目的根目录,输入 "ccmake ." 进入一个图形化界面,如下图所示:
 
ccmake的界面


执行了configure后的ccmake的界面
下面我们首先生成debug版的Makefile:将变量CMAKE_BUILD_TYPE设置为Debug,按“c”进行configure,按“g”生成Makefile并推出。这时执行命令 find * | xargs grep  “O0”后结果如下:
执行命令 find * | xargs grep  “O0”后的结果
CMakeFiles/main.dir/flags.make:CXX_FLAGS = -O0 -Wall -g -ggdb CMakeFiles/main.dir/link.txt:/usr/bin/c++ 
-O0 -Wall -g -ggdb CMakeFiles/main.dir/main.cpp.o -o main -rdynamic 

CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

这个结果说明生成的 Makefile 中使用了变量 CMAKE_CXX_FLAGS_DEBUG 作为编译时的参数。
 

下面我们将生成Release版本的Makefile:再次执行“ccmake ." ,将变量CMAKE_BUILD_TYPE设置为Release,生成Makefile并推出。执行命令 find * | xargs grep  “O0”后结果如下:
find * | xargs grep "O0"的执行结果
CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") 而执行命令 find * | xargs grep "O3" 后结果如下:
CMakeCache.txt:CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeCache.txt:CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeFiles/main.dir/flags.make:CXX_FLAGS = -O3 -Wall CMakeFiles/main.dir/link.txt:/usr/bin/c++ -O3 -Wall CMakeFiles/main.dir/main.cpp.o -o main -rdynamic CMakeLists.txt:SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
这两个结果说明生成的Makefile中使用了CMAKE_CXXFLAGS_RELEASE,作为编译时的参数


####################################################################################

 

 
在cmake中要编译debug模式的话,在CMakeLists.txt中添加如下两行
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ")
SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall")
然后,在编译的时候,使用如下命令:
cmake -DCMAKE_BUILD_TYPE=Debug/Release  path
第三个参数path是指项目的顶层路径
1.  cmake支持gdb的实现,
首先在CMakeLists.txt下加入
SET(CMAKE_BUILD_TYPE "Debug")
在下面加入:
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
原因是CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release RelWithDebInfo >和 MinSizeRel。
当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile;
2.  在GDB中间加入程序启动参数
比如我们需要调试一个可执行文件./a.out help
这时
$gdb ./a.out
进入到gdb的命令行模式下,然后:
(gdb) set args help
就能加上可执行文件需要的参数,如果要看argc[1]到argc[N]的参数,只需要
(gdb) show args
3. gdb中查看字符串,地址的操作,数据类型
比始有一个int型的变量i,相要知道他的相关信息,可以
(gdb) print i
打印出变量i的当前值
(gdb)x &i
与上面的命令等价。
如果有x命令看时,需要看一片内存区域,(如果某个地方的值为0,用x时会自动截断了)
(gdb) x/16bx address
单字节16进制打印address地址处的长度为16的空间的内存,16表示空间长度,不是16进制,x表示16进制,b表示byte单字节
gdb看变量是哪个数据类型
(gdb) whatis i 
即可知道i是什么类型的变量



 
####################################################################################

官方文档https://cmake.org/cmake/help/v3.7/

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),输出各种各样的makefile或者project文件。CMake”这个名字是“cross platform make”的缩写。

  1. $> cmake ../sdk -Ddebug=ON

  2. $> make

  3. $> make install

第一条命令用于根据路径../sdk下的CMakeLists.txt生成Makefile文件;第二条命令执行Makefile文件,编译程序,生成可执行文件;第三条命令安装生成的可执行文件。
#后面为注释的内容。
CMakeLists.txt中的命令可以全部大写,或者全部小写。
 
# 指定工程名 e.g. 指定本工程的工程名为test_math
project(test_math)

# 定义变量 e.g. 定义SLNDIR变量,变量值为../../。变量的使用方法为${variable name}

set(SLNDIR ../../)

# 从文件加载CMake命令 e.g. 加载../../prj.mak/sp.cmake文件的所有命令

include(${SLNDIR}prj.mak/sp.cmake)

# 添加包含路径,编译器能这些路径中寻找头文件 e.g. 添加两个路径

include_directories (${SLNDIR}src/include ${SLNDIR}src/3rd/include )

# 添加可执行文件。从源文件source1, source2...生成可执行文件name

add_executable (<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
# 添加库。 从源文件source1, source2...生成库name(静态库,动态库)

add_library (<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
# 显示信息

message ([<mode>] "message to display" ...)

# 添加build子文件夹。告诉CMake执行source_dir下的 CMakeLists.txt文件,编译source_dir中的源代码

add_subdirectory ( source_dir   [ binary_dir ]   [ EXCLUDE_FROM_ALL ])
#  收集所有的源文件。将dir路径下的所有源文件都存储在variable中

aux_source_directory(<dir> <variable>)

# 设置链接库的搜索路径。相当于gcc中的-L(大写L)

Specify directories in which the linker will look for libraries.

link_directories (directory1 directory2 ...)

# 设置链接库。该命令之后的所有target都要链接该命令中设置的库

Link libraries to all targets added later.

link_libraries ([item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)

# 设置预编译宏。e.g. Debug模式下add_definitions(-g -D_DEBUG); Release模式下add_definitions(-DNDEBUG -O2)

add_def initions(-DFOO -DBAR ...)

# 用户可选择的选项。
option(debug "is debug mode?" OFF).可以通过-D选择不同的选项。
如cmake ../source -Ddebug=ON;cmake ../source -Ddebug=OFF

option (<option_variable> "help string describing option" [initial value])
option_variable可以通过${option_variable}进行访问,其值为ON或者OFF

# 设置变量,取消变量

set (CMAKE_DEBUG_POSTFIX "d") 
#设置debug模式时,输出产物名加后缀d

unset (CMAKE_DEBUG_POSTFIX)
# 取消CMAKE_DEBUG_POSTFIX变量的设置

# 逻辑判断

if(<variable>)

if(NOT <expression>)

if(<expr1> AND <expr2>)

if(<expr1> OR <expr2>)

if(DEFINED <variable>)

if((expression) AND (expression OR (expression)))

if(<variable|string> MATCHES regex) if(<variable|string> LESS <variable|string>) if(<variable|string> GREATER <variable|string>) if(<variable|string> EQUAL <variable|string>) if(<variable|string> STRLESS <variable|string>) if(<variable|string> STRGREATER <variable|string>) if(<variable|string> STREQUAL <variable|string>)


cmake操作系统平台的判断

  1. MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}") 
  1. IF (CMAKE_SYSTEM_NAME MATCHES "Linux")  
  2.     MESSAGE(STATUS "current platform: Linux ")  
  3. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")  
  4.     MESSAGE(STATUS "current platform: Windows")  
  5. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")  
  6.     MESSAGE(STATUS "current platform: FreeBSD")  
  7. ELSE ()  
  8.     MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}")  
  9. ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")  
  1. IF (WIN32)  
  2.     MESSAGE(STATUS "Now is windows")  
  3. ELSEIF (APPLE)  
  4.     MESSAGE(STATUS "Now is Apple systens.")  
  5. ELSEIF (UNIX)  
  6.     MESSAGE(STATUS "Now is UNIX-like OS's. Including aPPLE os x  and CygWin")  
  7. ENDIF () 
CMake注意事项:
1.使用set设置CMAKE_CXX_FLAGS等变量时不要覆盖,尽量保留系统默认的一些值,在这些值后面添加就行了。例如:
set(LOCAL_CXX_FLAGS "-fPIC -fPE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOCAL_CXX_FLAGS}")
CMake调用openmp

  1. FIND_PACKAGE( OpenMP REQUIRED)  
  2. if(OPENMP_FOUND)  
  3. message("OPENMP FOUND")  
  4. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")  
  5. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")  
  6. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
  7. set(CMAKE_SHARE_LINKER_FLAGS "${CMAKE_SHARE_LINKER_FLAGS} ${OpenMP_SHARE_LINKER_FLAGS}")
  8. endif()  


交叉编译

6.1     基本概念

宿主机host是执行编译、链接嵌入式软件的计算机;
目标机target是运行嵌入式软件的硬件平台。
通常我们用的PC机(window系统或者liunx系统)就是宿主机,
而客户使用的车机(QNX系统)、手机(Andorid系统)则是目标机。

在宿主机host上要生成目标机target的程序就是交叉编译。交叉编译时需要修改以下内容:

Ø  修改编译器;

Ø  修改依赖库;

Ø  修改头文件;

 

使用CMake进行交叉编译就是要告诉CMake目标机target是什么平台、
使用什么编译器、
到哪里寻找依赖库、
到哪里寻到头文件。
CMake使用一些内建变量定义上述内容。
 

Ø  CMAKE_SYSTEM_NAME: 即你目标机target所在的操作系统名称,
比如ARM或者Linux你就需要写"Linux",
如果Windows平台你就写"Windows",
如果你的嵌入式平台没有相关OS你即需要写成"Generic",
只有当CMAKE_SYSTEM_NAME这个变量被设置了,
CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.
 

Ø  CMAKE_C_COMPILER: 顾名思义,即C语言编译器,
这里可以将变量设置成完整路径或者文件名,
设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,
如果你写的文件名带有arm-elf等等前缀,
CMake会识别到并且去寻找相关的交叉编译器。
 

Ø  CMAKE_CXX_COMPILER: 同上,此时代表的是C++编译器
 

Ø  CMAKE_FIND_ROOT_PATH: 代表了一系列的相关文件夹路径的根路径的变更
 

Ø  CMAKE_FIND_ROOT_PATH_MODE_PROGRAM: 
对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,
第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,
第二个表示只在这个路径下查找,
第三个表示先查找这个路径,再查找全局路径,
对于这个变量来说,一般都是调用宿主机的程序,
所以一般都设置成NEVER
 

Ø  CMAKE_FIND_ROOT_PATH_MODE_LIBRARY: 
对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,
因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.
 

Ø  CMAKE_FIND_ROOT_PATH_MODE_INCLUDE: 
对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY

 

 

与交叉编译相关的这些变量如何传递给CMake了?最为方便的一个方法就是将相关的变量设置都放进一个文件(cmake脚本)中去,然后将该文件通过CMAKE_TOOLCHIAIN_FILE传递给CMake, 例如:

cmake-DCMAKE_TOOLCHIAIN_FILE="/path/to/toolchain-file" ..

 

6.2    附上一个CMake官方文档中的toolchian-file的小例子,这样我们就会对如何写toolchain-file文件有了感性认识:

# this one is important

SET(CMAKE_SYSTEM_NAMELinux)
 

#this one not so much

SET(CMAKE_SYSTEM_VERSION 1)

 

# specify the crosscompiler

SET(CMAKE_C_COMPILER   /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)

SET(CMAKE_CXX_COMPILER/opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)

 

# where is the targetenvironment

SET(CMAKE_FIND_ROOT_PATH  /opt/eldk-2007-01-19/ppc_74xx/home/alex/eldk-ppc74xx-inst)

 

# search for programs inthe build host directories

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)
 

# for libraries and headersin the target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)

SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

 

6.3    编译生成Android平台上的程序,需要用到GOOGLE为我们提供了的Android NDK用来做Native(C/C++)的build。Android NDK中包含了整套的编译器、系统库、头文件、调试器等。

使用CMake交叉编译Android平台上的程序,就需要:

Ø  指明目标平台为Android

Ø  指明目标硬件是ARM还是X86

Ø  指明ndk level version

Ø  用ndk提供的编译器

Ø  从ndk安装目录搜寻依赖库和头文件

 

我们可以自己动手编写toolchain-file,设置相应的变量。这也比较麻烦。

幸运的是,我们有Android-cmake项目可以帮忙。该项目生成了一个名为android.toolchain.cmake的toolchain-file文件,该文件帮我们设置了大部分的变量。我们需要做的就是指定cmake的toolchain file为这个项目里面的android.toolchain.cmake文件,然后设置好Android NDK路径即可。

# Usage Linux:

export ANDROID_NDK=/absolute/path/to/the/android-ndk

mkdir build && cdbuild

cmake-DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake ..

make -j8

make install

 

# Usage Windows:

SETANDROID_NDK=C:\absolute\path\to\the\android-ndk

mkdir build && cdbuild

cmake.exe -G"MinGWMakefiles" ^

 -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake ^

 -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe"^

  ..

cmake.exe --build . --target install--clean-first


附录:Visual Studio属性与对应cmakelists实现方法:

注意:此附录仅为beta版本,有些条目是推导出来的。

 http://blog.csdn.net/xum2008/article/details/7268761

Visual Studio  Cmake
Project Reference  add_dependencies()
General/Output Directory   
    
    
Debugging/Working Directory  CMAKE can’t set this value, because the info not stored in project file but some intermedia file generated by visual studio
    
c/c++GeneralAdditional Include Directoriesinclude_directories()
  Resolve #using ReferencesDon’t know
  Debug Information FormatCMAKE FAQ 
set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd 
/Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT 
/Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
  Common language runtime supportset_target_properties( target PROPERTIES COMPILE_FLAGS “/clr”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:pure”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:safe”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:oldSynax”)
  Suppress Startup Bannerset_target_properties( target PROPERTIES COMPILE_FLAGS “/nologo” )
  Warning Levelset_target_properties( target PROPERTIES COMPILE_FLAGS “/W0” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W1” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W2” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W3” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/W4" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Wall” )
  Treat Warnings As Errorsset_target_properties( target PROPERTIES COMPILE_FLAGS “/WX-" ) #No 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/WX" )  #Yes
  Multi-processor Compilationset_target_properties( target PROPERTIES COMPILE_FLAGS “/MP" )  #Yes 
#Don’t set means No
  Use Unicode For Assembler Listingset_target_properties( target PROPERTIES COMPILE_FLAGS “/FAu" ) #yes 
#Don’t set means no
 OptimizationOptimizationset(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT
/O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT 
/O2/Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT 
/Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
  Inline Function Expansionset(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /
Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /
Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT 
/Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
  Enable Intrinsic Functionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/Oi" ) #yes 
#Don’t set means no
  Favor Size or Speedset_target_properties( target PROPERTIES COMPILE_FLAGS “/Os" ) #size 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Ot" ) #speed 
#Don’t set means neither
  Omit Frame Pointersset_target_properties( target PROPERTIES COMPILE_FLAGS “/Oy-" ) #no 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Oy" ) #yes
  Enable Fiber-safe Optimizationsset_target_properties( target PROPERTIES COMPILE_FLAGS “/GT" ) #yes 
#not setting means no
  Whole Program Optimizationset_target_properties( target PROPERTIES COMPILE_FLAGS “/GL" ) #yes 
#not setting means no
 PreprocessorPreprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL ) 
set_source_files_properties( filename.cpp PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL )
  Undefine Preprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/UDEFNAME" )
  Undefine All Preprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/u" )
  Ignore Standard Include Pathset_target_properties( target PROPERTIES COMPILE_FLAGS “/X" )
  Preprocess to a Fileset_target_properties( target PROPERTIES COMPILE_FLAGS “/P" )
  Preprocess Suppress Line Numbersset_target_properties( target PROPERTIES COMPILE_FLAGS “/EP" )
  Keep Commentsset_target_properties( target PROPERTIES COMPILE_FLAGS “/C" )
 Code GenerationEnable String Poolingset_target_properties( target PROPERTIES COMPILE_FLAGS “/GF" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GF-" ) #no
  Enable Minimum Rebuildset_target_properties( target PROPERTIES COMPILE_FLAGS “/Gm" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Gm-" )#no
  Enable C++ Exceptionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/EHsc" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/EHa" ) #yes, with SEH exceptions 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/EHs" ) #yes, with extern C functions 
#not setting means no
  Smaller Type Checkset_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCc" ) #yes 
#not setting means no
  Basic Runtime Checksset_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCs" ) #Stack frame check 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCu" ) #Uninitialized Variable 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/TRC1" ) #Both 
#not setting means no
  Runtime LibraryCMAKE FAQ 
set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG
/MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "
/MT/O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "
/MT /O2 /Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "
/MT /Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
  Struct Member Alignmentset_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp1" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp2" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp4" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp8" )set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp16" )
  Buffer Security Checkset_target_properties( target PROPERTIES COMPILE_FLAGS “/GS" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GS-" ) #no
  Enable Function-Level Linkingset_target_properties( target PROPERTIES COMPILE_FLAGS “/Gy" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Gy-" ) #no
  Enable Enhaunced Instruction Setset_target_properties( target PROPERTIES COMPILE_FLAGS “/arch:SSE" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/arch:SSE2" )
  Floating Point Modelset_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:precise" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:strict" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:fast" )
  Enable Floating Point Exceptionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:except" )
  Create Hotpatchable Imageset_target_properties( target PROPERTIES COMPILE_FLAGS “/hotpatch" )
 LanguageDisable Language Extensionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/Za" )
  Treat Wchar_t As Built in Typeset_target_properties( target PROPERTIES COMPILE_FLAGS “/Zc:wchar_t" )#yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zc:wchar_t-" ) #no
  Force Conformance in For Loop Scope 
  Enable Run-Time Type Informationset_target_properties( target PROPERTIES COMPILE_FLAGS “/GR" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GR-" ) #no
  Open MP Supportset_target_properties( target PROPERTIES COMPILE_FLAGS “/openmp" )#yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/openmp-" )#no
 PreCompiled HeaderPreCompiled Headerset_target_properties( target PROPERTIES COMPILE_FLAGS "/Yc" ) #create 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yu" ) #use 
#not setting means no
  PreCompiled Header Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/Ycstdafx.h" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yustdafx.h" )
  Precompiled Header output Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FpPathAndName.pch" )
 Output FilesExpand Attributed Sourceset_target_properties( target PROPERTIES COMPILE_FLAGS "/Fx" )
  Assembler Outputset_target_properties( target PROPERTIES COMPILE_FLAGS "/FA" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAc" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAs" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAcs" ) 
#not setting means no list
  ASM List Locationset_target_properties( target PROPERTIES COMPILE_FLAGS "/FaDebug" )
  Object File nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/FoName.obj" )
  Program DataBase File Nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/FdC:/Debug/good.pdb" )
  Generate XML Documentation Filesset_target_properties( target PROPERTIES COMPILE_FLAGS "/doc" )
  XML Documentation Filenameset_target_properties( target PROPERTIES COMPILE_FLAGS "/docDocument.xml" )
 Browse InformationEnable Browse Informationset_target_properties( target PROPERTIES COMPILE_FLAGS "/FR" )
  Browse Information Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FRfilename" )
 AdvancedCalling Conventionset_target_properties( target PROPERTIES COMPILE_FLAGS "/Gd" ) #_cdecl 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gr" )  #_fastcall 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gz" ) #_stdcall
  Compile Asset_target_properties( target PROPERTIES LINKER_LANGUAGE "CXX" ) #C++ 
set_target_properties( target PROPERTIES LINKER_LANGUAGE "C" ) #C 
or 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/TP" ) #CXX 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/TC" ) #C
  Disable Specific Warningsset_target_properties( target PROPERTIES COMPILE_FLAGS "/wd4710" )
  Forced Include Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FIinclude.h" )
  Forced #using Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FUname" )
  Show Includesset_target_properties( target PROPERTIES COMPILE_FLAGS "/showIncludes" )
  Use full Pathsset_target_properties( target PROPERTIES COMPILE_FLAGS "/FC" )
  Omit Default Library nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/ZI" )
  Internal Compiler Error Reportingset_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:queue" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:none" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:prompt" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:send" )
  Treat Specific Warnings as ErrorsDon't know
LinkerGeneralOutput File#normal case 
set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES PREFIX "lib" ) 
set_target_properties( target PROPERTIES SUFFIX "lib" ) 

#for debug version 
set_target_properties( target PROPERTIES DEBUG_OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES DEBUG_PREFIX "lib" ) 
set_target_properties( target PROPERTIES DEBUG_SUFFIX "lib" ) 

#For dlls 
set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES IMPORT_PREFIX "lib" ) 
set_target_properties( target PROPERTIES IMPORT_SUFFIX "lib" ) 
set_target_properties( target PROPERTIES PREFIX "bin" ) 
set_target_properties( target PROPERTIES SUFFIX "dll" ) 

#output path
  Show Progressset_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:Lib" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:ICF" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:REF" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:SAFESEH" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:CLR" ) 
#not setting means no
  Versionset_target_properties( target PROPERTIES VERSION 0.1.2.3)
  Enable Incremental Linkingset_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL:NO" ) 

set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL" ) 
set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO" )
  Suppress Startup Bannerset_target_properties( target PROPERTIES LINK_FLAGS "/NOLOGO" )
  Ignore Import LibraryDon't know
  Register OutputDon't know
  Per-user RedirectionDon't know
  Additional Library Directorieslink_directories( dir1 dir2 ) 

set_target_properties( target PROPERTIES LINK_FLAGS "/LIBPATH:dir1 /LIBPATH:dir2" )
  Link Library DependenciesDon't know
  Use Library Dependency InputsDon't know
  Link Statusset_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:STATUS" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:NOSTATUS" )
  Prevent DLL Bindingset_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:NO" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:YES" )
  Treat Linker Warnings As Errorsset_target_properties( target PROPERTIES LINK_FLAGS "/WX" )
  Force File Outputset_target_properties( target PROPERTIES LINK_FLAGS "/FORCE" )
  Create Hot Patchable Imageset_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:16" ) #Itanium only 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:6" ) #x64 only 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:5" ) #x86 only
  Specify Section AttributesDon't know
 InputAdditional Dependanciestarget_link_libraries( target item1 item2 )
  Ignore All Default Librariesset_target_properties( target PROPERTIES LINK_FLAGS "/NODEFAULTLIB" )
    
    
    
Put files into folders  source_group( header FILES includeme.h )
    
    
    
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cmake的 debug和release 的相关文章

  • 释放保留视图的最佳实践?

    这是释放保留的视图的正确 最好 方法吗 viewDidLoad 在 iOS 4 x 或更低版本中 还有什么需要考虑的吗 void viewDidUnload super viewDidUnload self releaseViews voi
  • Jenkins + Cmake + JIRA = 多个相互依赖项目的 CI?

    我们的系统中有许多小项目在 Linux 上运行 Slackware 7 11 正在慢慢迁移到 RHEL 6 0 大约 50 100 个应用程序和 15 20 个库 我们几乎所有的应用程序都使用我们的一个或多个库 我们的源树看起来像这样 ap
  • CMake 占位符如何工作?

    在 CMake 的支持库中 您将看到如下所示的命令定义 set CMAKE ASM ASM DIALECT COMPILE OBJECT
  • fbtorch:cmake 找不到 torch 目录

    我正在尝试构建并安装 fbtorch 但是当我使用 cmake 时出现以下错误 CMake Error at CMakeLists txt 9 FIND PACKAGE By not providing FindTorch cmake in
  • 如何以编程方式迭代所有 CMake 目标?

    有没有办法从顶层获取 CMake 项目的所有目标CMakeLists txt 即以编程方式迭代目标 我想要这样做的原因是将一些 XCode 特定设置应用于每个目标 if CMAKE GENERATOR MATCHES Xcode inclu
  • cmake 和视觉工作室

    海湾合作委员会 4 4 2 Visual Studio C 2008 我一直在linux上使用cmake 没有任何问题 现在我已经通过应用程序移植到 Windows 上运行 我使用 cmake G Visual Studio 9 2008
  • CMake:将为 lib 构建的对象文件重用到另一个 lib 目标中

    我正在尝试将我的项目转移到CMake 同时对编译过程进行一些优化 这是交易 我有几个子目录 必须 每个子目录都编译成静态库 这有效 我想将每个子目录中的所有目标文件收集到另一个更大的 完整的静态库中 它看起来像这样 libBig a mad
  • CXX 编译器标识未知

    我们在使用 Visual Studio 2012 在 Windows 7 64 位下使用 CMake v2 8 12 编译项目时遇到问题 CMake 给我们提供了以下错误 我们已经尝试使用管理员权限从 Visual Studio 命令行启动
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • cmake MSYS Makefiles 生成器丢失

    我通过 pacman 安装了 cmake 3 2 3 当我尝试从 msys64 shell 中使用它时出现错误 cmake G MSYS Makefiles CMake Error Could not create named genera
  • cmake 不会在更改时重建 externalProject

    我有以下 CMakeLists txt cmake minimum required VERSION 3 0 project addProject include ExternalProject set ExternalProjectCMa
  • pybind11:如何将 c++ 和 python 代码打包到一个包中?

    我正在尝试使用 CMake 和 pybind 11 将现有的 Python 代码和新的 C 11 代码打包在一起 我认为我缺少一些可以添加到 CMake 脚本中的简单内容 但在任何地方都找不到它 pybind11 示例只有 C 代码和没有P
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal
  • Jenkins + Gradle + Artifactory:无法读取生成的构建信息

    我正在尝试使用 Jenkins Pipeline 调用 Gradle 工具 将我的工件推送到 Artifactory 我正在关注 GitHub 上发布的示例 Example1 https github com JFrogDev projec
  • 是否可以使用 gold 链接器编译和链接 Clang/LLVM?

    我正在为 LLVM Clang 编写自定义通道 重新编译往往需要一段时间并使用大量内存 我听说 gold 链接器 1 比标准 ld 链接器花费更少的时间并且 2 使用更少的内存 有没有办法将标志传递到 LLVM Clang 构建过程并更改为
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 在cmake中,什么是“项目”?

    这个问题是关于project命令 推而广之 是什么concept of a project意思是cmake中的 我真的不明白什么是project是 以及它与target 我想我确实理解 我看了一下cmake 文档project http w

随机推荐

  • vscode终端加git的方法

    记录一下 xff0c vscode添加git终端的方法 1 先打开首选项 61 gt 设置 xff0c 搜 shell window xff0c 然后找到setting json 2 添加代码 xff08 设置git的位置 xff0c 以及
  • jquery的简单介绍

    jQuery也包含了对ajax的封装 什么是jQuery jQuery是一门轻量的 免费开源的JS函数库 xff0c 主要作用是用于简化JS代码 轻量的 xff1a 代码或项目对该技术的依赖程度 xff0c 依赖程度越低 xff0c 这个技
  • 图像质量评估(2) -- 图像质量相关参数:分辨率

    分辨率 xff08 解析度 xff0c Resolution xff09 分辨率使我们经常听到的一个词 xff0c 它代表了图像的精细程度 xff0c 也代表了图像的大小 分辨率决定了在这种大小下 xff0c 输出信号是否能够包含足够多的信
  • 图像质量评估(5) -- 畸变(Distortion)

    当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时 xff0c 我们称为图像畸变 有三种类型的镜头畸变 xff1a 桶形畸变 xff08 后文使用英文barrel xff09 xff0c 枕形畸变 xff08 后文使用pincus
  • FreeCMS视频教程 将FreeCMS导入eclipse

    项目地址 xff1a http www freeteam cn 原文地址http www freeteam cn site FreeCMS videos info 2016 5670 html
  • qsort的使用

    一 了解qsort xff08 1 xff09 编译器函数库万能数组排序函数排序函数 它是基于快速排序算法 xff0c 所以是q sort q 指的是 quick 快速 qsort 的函数原型是 void qsort void base s
  • 【转】粒子滤波简介以及相关技术探讨

    之前一直在做移动机器人定位算法 查来查去 xff0c 发觉粒子滤波算法 xff08 又叫MC算法 xff09 应该算是最流行的了 因此开始学习使用之 入手的是本英文书叫 probalistic robotic 很不错 xff0c 我所见到的
  • 蓝牙技术的基础知识

    1 无线电频谱 蓝牙技术使用2 4 GHz ISM频段 xff08 2400至2483 5 MHz xff09 xff0c ISM频段就是各国挪出某一段频段主要开放给工业 xff0c 科学和医学机构使用 应用这些频段无需许可证或费用 xff
  • Ubuntu下实现串口通信

    在ubuntu下使用cutecom可以接受串口消息也可以给串口发送消息 基本信息 xff1a 库 xff1a Python 的 serial 硬件 xff1a 电脑 Ubuntu18 04系统 USB Jeston AGX Xavier x
  • 4.FreeRTOS调度器的启动简易分析

    FreeRTOS调度器的启动简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 上一篇我分析了关于一个任务的创建过程 xff0c 既然创建了任务 xff0c 自然是要用 那么Fre
  • ARM40-A5应用——与网络时间的同步1(概述)

    ARM40 A5应用 与网络时间的同步1 xff08 概述 xff09 2018 6 28 版权声明 xff1a 本文为博主原创文章 xff0c 允许转载 本文介绍ARM40 A5本地系统时间 硬件时间 时区 网络时间 ntpdate nt
  • 如何有效阅读《C++ Primer》那么厚的书

    我就是那种正面刚大部头的选手 xff0c 这些年读过的工作相关的 砖头 大概有 c 43 43 primer xff0c Windows核心编程 xff0c 算法导论 xff0c unix网络编程 xff0c STL源码剖析 等等吧 xff
  • 【Arduino 语法——结构体】

    Arduino 语法 结构体 1 0 项目结构 1 1 setup 1 2 loop 1 3 main 2 0 控制语句 2 1 break 2 2 continue 2 3 while 2 4 do while 2 5 for 2 6 i
  • 【MKS_GEN_L 主板使用说明书】

    MKS GEN L 主板使用说明书 1 描述2 特征3 主板封装3 1 尺寸图3 2 接线图3 2 1 MKS GEN L V1 0系统连接图3 2 2 MKSGEN L V2 1系统连接图 4 引脚排列5 GEN LV2 1驱动设置5 1
  • 【基于腾讯云的远程机械臂小车】

    基于腾讯云的远程机械臂小车 1 项目来源 1 1 项目概述 1 2 系统结构 1 3 设计原理 2 硬件搭建 2 1 CH32V307开发板 2 2 Arduino mega2560 2 3 富斯I6遥控器 2 4 机械臂小车 2 5 ES
  • 电脑之间快速传输超大文件(100GB以上)的方法

    引言 假如有这样一个场景 xff0c 你买了一台新的电脑 但是老电脑上存放着多年累积的数据 几百G之多 你要花时间把旧电脑上的数据导到新电脑上去 xff0c 这很费精力 于是你想有没有更快速的方法立马挪过去呢 xff1f 本文提供了五种方法
  • 《软件架构设计》(Yanlz Unity SteamVR 云技术 5G AI=VR云游戏=框架编程 架构设计 设计重构 游戏框架 框架入门 架构师 UML MVC ECS 立钻哥哥 ==)

    软件架构设计 软件架构设计 版本 作者 参与者 完成日期 备注 YanlzFramework 1910 V01 1 0 严立钻 2019 10 19 软件架构设计 发布说明 xff1a 43 43 43 43 软件架构设计 xff1a 是对
  • 进程的切换过程

    切换方式 进程的切换 xff0c 实质上就是被中断运行进程与待运行进程的上下文切换 从主观上来理解 只分为两步 xff1a 1 切换新的页表 xff0c 然后使用新的虚拟地址空间 2 切换内核栈 xff0c 加入新的内容 PCB控制块 xf
  • SLAM之camera(Intel RealSense D435)调试第一弹:Win10平台下getting started

    参见官方的getting started文档 https software intel com en us realsense d400 get started xff0c 这个quick start guide是Intel RealSen
  • Cmake的 debug和release

    Cmake的 debug版本和release版本 xff08 转 xff09 debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化 xff0c 而release版本的不需要调试信息但是需要优化 这些特性在gcc g 43 4