我们将build目录作为开发版本编译目录,与之相对的新建一个release目录作为发布版本 在build目录下我们执行cmake -DMAKE_BUILD_TYPE=Debug ..,编译命令会使用-g 在release目录下我们执行cmake -DMAKE_BUILD_TYPE=Release ..,编译命令会使用-O3 -DNDEBUG 所以,在源代码中,我们可以使用NDEBUG宏来控制,在开发版输出调...
在Visual Studio中我们可以生成debug版本和release版本的程序,使用Cmake我们也可以达到同样的效果。debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化,而release版本的不需要调试信息但是需要优化。这些特性在gcc/g++中通过编译时的参数来决定的,如果将优化程度调到最高需要设置 -O3 ,最低的...
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...
比如-O0 -O3同时存在。 后面的会覆盖前面的。 gcc -O0 -O3 test.c -o test,则执行O3优化 gcc -O3 -O0 test.c -o test,不执行优化 4 最好的解决办法 如果是编译release版本的话, mkdir Release cd Release cmake -DCMAKE_BUILD_TYPE=Release .. make 如果是编译debug版本的话, mkdir Debug cd D...
project()在上面提到是指定当前项目的名称。而message()类似于printf用于答应信息。set()用于显示的定义变量,比如定义CMAKE_C_COMPILER变量保存arm平台C编译器的路径,定义CMAKE_BUILD_TYPE变量指定编译的是Release版本程序。add_compile_options(-D_DEBUG)add_compile_options(-D_INTERNALDEBUG) add_compile_options(-...
>>建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要编译不同版本时进入不同目录执行make即可; Debug版会使用参数-g;Release版使用-O3 –DNDEBUG >> 另一种设置方法——例如DEBUG版设置编译参数DDEBUG IF(DEBUG_mode) add_definitions(-DDEBUG) ENDIF() 在执行cmake时增...
set(CMAKE_CXX_FLAGS_RELEASE \O3\ 5. 指定输出路径 可以使用CMake的变量来指定输出路径。例如,将可执行文件输出到bin目录:set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)6. 生成静态库或动态库 使用add_library指令可以生成静态库或动态库。例如,生成静态库:add_library(MyLibrary STATIC ...
Release: -O3 -DNDEBUG MinSizeRel: -Os -DNDEBUG RelWithDebInfo: -O2 -g -DNDEBUG 此外需要注意:NDEBUG宏会使assert宏被去除掉(assert宏主要是在调试时使用)。 小技巧:设定一个变量的默认值 如何让 CMAKE_BUILD_TYPE 在用户没有指定的时候为 Release,而在用户指定的时候就等于用户指定的值呢? 由于在 CMa...
Release:‘-O3 -DNDEBUG’ MinSizeRel:'-Os -DNDEBUG' RelWithDebInfo:‘-O2 -g -DNDEBUG’,带调试信息的发布,文件信息会很大,带有调试的符号信息 NDEBUG:让assert失效,变成一个空的宏 几个路径: PROJECT_NAME:项目名字 PROJECT_SOURCE_DIR:最外层的源码目录,存放main.cpp的地方 ...