add_compile_options加入某些编译选项(-pg)无效
add_compile_options加入某些编译选项(-pg)无效
是这样,今天我要使用gprof工具分析一段C++代码的运行时间,工程是CMake创建的
我们都知道,要使用gprof就要在代码编译时加入-pg选项,CMake添加编译选项通常有以下两种方法:
-
add_compile_options(-pg)
add_compile_options(-pg) message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
输出结果:
CMAKE_CXX_FLAGS =
不仅CMAKE_CXX_FLAGS没有改变,而且-pg选项也没有生效(即运行可执行文件后并没有生成.out文件)
-
set(CMAKE_CXX_FLAGS -pg)
set(CMAKE_CXX_FLAGS -pg) message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
输出结果:
CMAKE_CXX_FLAGS = -pg
CMAKE_CXX_FLAGS成功加入-pg,而且-pg也生效(能够生成.out文件),使用gprof正常分析。
这里我就产生了几个疑问:
- 为什么add_compile_options(-pg)不起作用?
- CMAKE_CXX_FLAGS到底有什么含义?是否包含了所有的编译选项?
add_compile_options
是用来配置当前目录和子目录的所有目标文件的options。如果有一个库需要让所有的目标文件链接的时候,使用此命令非常方便。所有添加的options可以通过COMPILE_OPTIONS
属性查看。add_compile_options
作用的范围太广,一般很少使用。CMAKE_CXX_FLAGS
是配置所有C++目标文件的flags。可以传递一些参数比如warnings的等级,使用的C++标准等。对C语言的目标文件没有效,因此用户可为他们两种文件设置不同的flags。
对于某些编译选项如-fPIC,两种方法都能使其生效,但是调用add_compile_options
方法时CMAKE_CXX_FLAGS
不会被改变;但对于某些选项如-pg,可以通过修改CMAKE_CXX_FLAGS
生效,但调用add_compile_options
无效!
对于一个目标文件,CMake会收集CMAKE_CXX_FLAGS
和COMPILE_OPTIONS
属性等来作为最终的flags。
所以,CMAKE_CXX_FLAGS
有其独立的含义而不能被其它的命令改变!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)