为 cmake 添加 -pg 编译选项

本文介绍了如何在KDevelop中为CMake项目添加-pg编译选项来使用性能分析器。作者遇到的问题是仅想分析krdc项目的源码数据,而非共享库。尝试在CMakeLists.txt添加选项未成功,最终通过修改KDevelop的CMAKE_CXX_FLAGS_DEBUG和CMAKE_C_FLAGS_DEBUG设置实现了目标。此外,还分享了在Qt-Creator中使用Valgrind分析器时如何只显示项目源码的分析信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为 cmake 添加 -pg 编译选项

我从 github clone 了 krdc 项目, checkout 到 19.12.3 版本 https://github.com/KDE/krdc/releases/tag/v19.12.3

我想通过 profiler 了解下程序运行的调用关系, 先用了 valgrind 和 kcachegrind, 问题是产生了一堆共享库的数据,我只想看 krdc 项目源码内的数据,不知道如何做,欢迎评论指点。

就再尝试 gcc -pg ,我照网上指点,在cmakelists.txt 里加了一句 add_compile_options("-pg"), 在KDevelop 里重新build之后, 我可以看到生成的krdc执行文件大小变大了一点点,但运行这个 krdc 文件退出后,却找不到 gmon.out 文件生成。

后来在KDevelop 菜单 project->open configuration ->configure cmake settings ->show advanced values 里面, 把CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 两个参数从 -g 改成 -pg (同时注释掉上面在cmakelists.txt 里添加的那行), 重新编译,运行后,才看到 gmon.out 文件。可以看到生成的krdc执行文件比之前又大了不少。

不明白改,cmakelists.txt 不行,但我确实看到执行文件增大了一点啊(虽然貌似还不够大)?这个KDevelop 图形界面里的设置和 cmakelists.txt 文件

<think>好的,用户现在问的是关于MinGW64的编译指令。首先,我需要回想之前的对话历史,之前用户询问如何配置C++编译环境,我给出了详细的步骤,包括Windows下使用MinGW-w64的安装和环境变量配置,以及验证方法。现在用户可能已经成功安装了MinGW64,现在需要知道具体的编译命令。 接下来,我需要考虑用户的使用场景。用户可能刚开始学习C++,或者已经有一定基础,需要更深入了解编译器的使用。用户可能在使用Windows系统,因为MinGW64主要在Windows下使用。他们的真实需求不仅仅是知道几个命令,而是如何正确编译程序,处理常见的编译问题,以及优化和调试等。 用户可能没有说出来的深层需求可能包括:如何指定C++标准版本,如何处理多个源文件,如何链接库,以及如何优化编译后的程序等。此外,他们可能遇到常见的错误,比如找不到头文件或链接错误,需要解决方案。 现在需要组织信息,从基本编译指令开始,逐步深入。包括编译单个文件、多个文件、指定输出文件名、启用警告和调试信息、优化选项、指定C++标准版本、链接库等。还需要提供常见错误处理,以及示例代码和编译命令,让用户能直接复制使用。 要确保步骤清晰,每个编译指令都有示例,并解释每个参数的作用。同时,提醒用户注意路径和文件名的正确性,避免常见错误。最后,可以给出一些使用建议,比如使用Makefile或CMake管理项目,方便用户进一步学习。 需要检查是否有遗漏的部分,比如预处理、汇编等步骤,但考虑到用户主要需求是编译和链接,可能不需要深入讲解每个阶段,除非用户特别提到。另外,确保命令的正确性,特别是参数的位置和顺序,比如-I和-L的位置,以及-std参数的版本选择。 最后,总结关键点,帮助用户快速回顾,并鼓励他们尝试实际编译,以加深理解。可能还需要提到IDE集成,但之前已经介绍过VS Code和CLion,这里可以简略提及,保持回答的针对性。</think>以下是最常用的MinGW64编译指令详解,包含基础到进阶的完整使用指南: $$ \text{MinGW64核心指令} = \text{预处理} \rightarrow \text{编译} \rightarrow \text{汇编} \rightarrow \text{链接} $$ ### 一、基础编译流程 1. **单文件编译** ```bash # 完整编译流程(生成a.exe) g++ hello.cpp # 指定输出文件名 g++ hello.cpp -o myapp.exe # 分步编译(适合调试) g++ -c hello.cpp # 生成hello.o g++ hello.o -o hello.exe ``` 2. **多文件编译** ```bash # 直接编译多个源文件 g++ main.cpp utils.cpp -o program.exe # 分步处理 g++ -c main.cpp # 生成main.o g++ -c utils.cpp # 生成utils.o g++ main.o utils.o -o app.exe ``` ### 二、关键编译选项 $$ \text{优化等级} \in \{ -O0, -O1, -O2, -O3, -Os \} $$ | 选项 | 作用描述 | 示例 | |---------------|----------------------------|------------------------------| | `-Wall` | 启用所有警告 | `g++ -Wall main.cpp` | | `-g` | 生成调试信息(GDB可用) | `g++ -g app.cpp` | | `-I<dir>` | 添加头文件搜索路径 | `g++ -Iinclude src/main.cpp` | | `-L<dir>` | 添加库文件搜索路径 | `g++ -Llib main.cpp` | | `-l<name>` | 链接指定库 | `g++ main.cpp -lSDL2` | | `-std=<标准>` | 指定C++标准 | `g++ -std=c++17 demo.cpp` | | `-D<宏定义>` | 定义预处理器宏 | `g++ -DDEBUG test.cpp` | ### 三、典型编译场景 1. **调试模式编译** ```bash g++ -g -Wall -O0 -o debug_app.exe main.cpp ``` 2. **发布模式优化** ```bash g++ -O3 -march=native -s -o release_app.exe main.cpp ``` 3. **使用C++20标准** ```bash g++ -std=c++20 -o modern_app.exe concepts.cpp ``` 4. **链接第三方库(以SFML为例)** ```bash g++ -I"C:\SFML\include" -L"C:\SFML\lib" \ main.cpp -lsfml-graphics -lsfml-window -lsfml-system ``` ### 四、Makefile示例 ```makefile CC = g++ CFLAGS = -Wall -std=c++17 LDFLAGS = -Llib LIBS = -lglfw3 app.exe: main.o utils.o $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LIBS) %.o: %.cpp $(CC) $(CFLAGS) -c $< -o $@ clean: del *.exe *.o ``` ### 五、常见错误处理 ```bash # 错误:undefined reference to `xxxx' # 解决方案:检查是否遗漏链接库 g++ main.cpp -lcurl # 错误:cannot find -lxxx # 解决方案:确认库路径是否正确 g++ -L"C:\mylibs" main.cpp -lxxx # 警告:narrowing conversion # 解决方案:启用严格检查 g++ -Werror=narrowing conversion.cpp ``` ### 六、交叉编译示例(Windows→Linux) ```bash # 安装mingw-w64交叉编译器 sudo apt install mingw-w64 # 编译Windows可执行文件(32位) i686-w64-mingw32-g++ hello.cpp -o hello32.exe # 编译Windows可执行文件(64位) x86_64-w64-mingw32-g++ hello.cpp -o hello64.exe ``` ### 七、性能分析支持 ```bash # 生成性能分析数据(gprof) g++ -pg -O2 benchmark.cpp ./a.exe gprof a.exe gmon.out > analysis.txt # 生成汇编代码(查看优化效果) g++ -S -O3 -masm=intel algorithm.cpp ``` **关键路径示意图**: ``` 源代码(.cpp) → 预处理(.i) → 编译(.s) → 汇编(.o) → 链接(.exe) ↖ 调试信息 ↗ ↖ 第三方库链接 ↗ ``` **建议工作流程**: 1. 开发阶段使用`-Wall -g -O0`选项 2. 测试阶段使用`-O2`优化 3. 发布时使用`-O3 -s`进行最高优化和体积压缩 实际使用时建议搭配`make`或`CMake`管理复杂项目,以上指令均可集成到构建系统中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值