问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何才能使CMake生成的可执行程序便于调试

发布网友 发布时间:2022-04-24 19:44

我来回答

1个回答

热心网友 时间:2023-10-09 01:01

出现的原因是导入的此makefile工程不是debug模式的,所以不包含调试信息,自然不能打断点调试了。因此,要解决这个问题就要考虑如何修改CMakeLists.txt使其生成的makefile文件进而生成Debug模式下的带调试信息的可执行程序;
我们先写一个简单的测试例子来测试一下,如何加调试信息:
假设文件结构如下:

./test6
|
+ ------ CmakeLists.txt
+ ------ main.cpp

+ ------ src_a
|
+ ------ CmakeLists.txt
+ ------ Testa.h
+ ------ Testa.cpp

+ ------ src_so
|
+ ------ CmakeLists.txt
+ ------ Testso.h
+ ------ Testso.cpp

第一步:test6目录下CmakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(main )

add_subdirectory(src_a ) // 给当前工程目录添加子目录 src_a
add_subdirectory(src_so ) // 给当前工程目录添加子目录 src_so

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(EXECUTABLE_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置可执行文件的生成路径

include_directories($ {PROJECT_SOURCE_DIR}/src_a ${PROJECT_SOURCE_DIR}/src_so) //包含库头文件

aux_source_directory(. DIR_SRCS ) // 将当前目录中的源文件名称赋值给变量 DIR_SRCS
add_executable(main $ {DIR_SRCS}) //表示 DIR_SRCS中的源文件需要编译成名为 main的可执行文件

target_link_libraries (main Testa Testso) //将库文件链接到生成的目标可执行文件

第二步:子目录目录下CmakeLists.txt
1,src_a中静态库的编译生成

cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 静态库生成路径

aux_source_directory(. LIBA_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRC
add_library(Testad STATIC $ {LIBA_SRC}) //将变量 LIBA_SRC中的源文件编译为静态库,库文件名称为 Testa

2,src_so中动态库的编译生成

cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 动态库库生成路径

aux_source_directory(. LIBSO_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRC
add_library(Testsod SHARED $ {LIBSO_SRC}) //将变量 LIBA_SRC中的源文件编译为动态库,库文件名称为 Testso

此处执行cmake时有两种方式:

1,在cmake的gui界面中设定生成Debug模式,
2,在执行cmake时使用如下命令:cmake -DCMAKE_BUILD_TYPE=Debug/Release path

关于ccmake的使用,这里简单的做个说明:
1.首先在终端启动cmake的gui界面:"ccmake ." 效果如图:

2.然后在gui中输入"c",效果如图:

3.然后在gui中输入"e",效果如图:

4.此时在gui界面点击"enter"回车键进行编辑:编辑完再次点击回车退出编辑。

5.点击"c",之后再次点击"g"。此时makefile文件已经生成好了。make之后生成的可执行文件是带有调试信息的,就可用gdb进行调试了(导入Eclipse也可以进行打断点调试)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023文科男生最吃香的专业 哪些专业好就业 在南京想找上海音乐学院的老师,怎么找? 荔枝核怎么服用-荔枝核煮水一般煮几颗合适 属虎适合什么名字2022年新生儿 有内涵热门名字精选 国内读研好,还是出国读研好 出国读研和国内读研哪个更好 在一个比例中,如果两个外项互为倒数。那么两个内向的什么是一?_百度知 ... 两个外项互为倒数,一个内向是8分之3,另一个内项是多少【怎样求出来... 在一个比例中,两个外向互为倒数,其中一个内项是8,另一个内项是_百度... 在比例中两个外项互为倒数,其中一个内向是2.75,另一个内项是多少_百度... 德州异地购房公积金提取 德州公积金租房提取上次是8月份提取了6500,下次什么时候再取? 德州提取公积金有哪些条件,什么时候可以提取 德州公积金租房提取上次是9月份提取了6500,下次什么时候再取? 苹果6plus系统软件更新过程中不动怎么办 德州2017年的公积金能够提取吗? 德州住房公积金提取怎么提 公积金查询方式:怎么查德州住房公积金查询个人账户 德州公积金贷款*调整丨首次贷款结清一年后才能申请二次贷款 在德州怎么查询个人公积金账户? 德州公积金怎么提取 德州调整住房公积金缴存基数和比例 计算器和计算机的区别? 电子计算器是学习用品一类的,还是电器一类的? 财务计算器如何用? 办公用的计算器什么牌子比较好? 东方之星计算器声音怎么开 计算器是什么 卡西欧计算器重量 大学生用什么计算器好? 小町米什么意思? 小町大米是什么米 小町米和普通米的区别是什么? 小町米是什么米,产自于那里? 小町米和超级小町米有什么区别 什么是东北小夕大米 小町米和珍珠米一样吗 东北大米,稻田小町哪种大米比较好 我在中石化加油充值送了一袋松江佰顺生态小町,是哪家公司生产的,小町是什么米,怎么煮好吃? 秋田小町米的米质营养 秋田小町大米什么地方产 秋田小町米的标准要求 小町大米和五常贡米哪个好 福临门秋田小町是转基因大米吗 鸭田稻和超级小町那个好吃 醉鹅娘休闲酒狮子歌歌怎么样?哪些口味比较好喝? 秋田小町和茉莉香米哪个好吃 索尼lt29i怎么样?好不好用? 索尼lt29i怎么样 皮皮虾是什么样的?