zoukankan      html  css  js  c++  java
  • 使用CMake,且在GCC编译时指定相对源代码路径选项BUG的问题

    CMake的build.make,每次都是cd xxx目录,然后再编译

    而编译时,GCC会取当前路径保存进调试信息的DT_AT_comp_dir,GCC的编译器选项-fdebug-prefix-map=old=new,允许将路径做一个映射替换,比如将/usr/loca/src/gowork/src/kurento/kms-core/替换成./

    同时DT_AT_name编译进的会是相应源代码文件的路径信息,也会受到-fdebug-prefix-map选项的影响。

    如上例,最终编译的调试信息中,DT_AT_comp_dir会是./obj-x86_64-linux-gnu/src/gst-plugins/

    而DT_AT_name会是./src/gst-plugins/kmscore.c。

    GDB调试时,对于DT_AT_name是相对路径,会与DT_AT_comp_dir进行拼装,路径信息会拼装成./obj-x86_64-linux-gnu/src/gst-plugins/./src/gst-plugins/kmscore.c

    就会出现源代码找不到的情况,这时候只能强制在编译时去除-fdebug-prefix-map选项,由于CMAKE在新版本的C_FLAGS默认就启用了-fdebug-prefix-map

    因此只能在CMakeLists.txt中去除相应选项,类似如下代码,插入到合适位置(正则表达式不完善,各位可以自行调整)

    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_C_FLAGS           ${CMAKE_C_FLAGS} )
    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_CXX_FLAGS         ${CMAKE_CXX_FLAGS} )
    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_C_FLAGS_DEBUG     ${CMAKE_C_FLAGS_DEBUG} )
    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_CXX_FLAGS_DEBUG   ${CMAKE_CXX_FLAGS_DEBUG} )
    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_C_FLAGS_RELEASE   ${CMAKE_C_FLAGS_RELEASE} )
    STRING( REGEX REPLACE "\-fdebug-prefix-map=[a-zA-Z0-9/=.\-]*" " " CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} )
    

      

  • 相关阅读:
    【Oracle】修改oracle数据库的字符集
    【OS_Linux】Centos7 设置定时任务
    【 DB_Oracle】Oracle多表关联更新
    Java后端技术路线
    【 OS_Linux】centos下查找jdk的安装路径
    【实用工具】Notepad++的主题和字体设置
    【OS_Linux】Linux删除指定日期之前的文件
    【OS_Windows】windows下删除指定日期前的文件
    C#计算一段程序运行时间的三种方法
    Win10 新功能 改变显示器色彩
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/10324671.html
Copyright © 2011-2022 走看看