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正常分析。

这里我就产生了几个疑问:

  1. 为什么add_compile_options(-pg)不起作用?
  2. 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_FLAGSCOMPILE_OPTIONS属性等来作为最终的flags。

所以,CMAKE_CXX_FLAGS有其独立的含义而不能被其它的命令改变!

原文链接: https://www.cnblogs.com/bluettt/p/12952543.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    add_compile_options加入某些编译选项(-pg)无效

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350539

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:22
下一篇 2023年3月2日 上午6:23

相关推荐