【问题标题】:GCC C++ compile options -mcpu [duplicate]GCC C++编译选项-mcpu [重复]
【发布时间】:2020-11-01 20:23:14
【问题描述】:

在调用 GCC 时,提供“-mcpu=cortex-m4”形式的选项来指定 CPU 类型。

有没有办法在运行时获取调用 GCC 的 -m CPU 字符串??

谢谢

【问题讨论】:

    标签: c++ gcc compilation options


    【解决方案1】:

    您可以通过一些巧妙的编译来实现这一点。例如,如果您使用Makefile,您可以将您的标志放入一个变量中,然后使用该变量设置一个宏,使用GCC -D 标志有点像这样:

    COMPILER_FLAGS=-std=c++11 -thread -O3
    
    program: program.cpp
        $(CXX) -DEXTERNAL_COMPILER_FLAGS="\"$(COMPILER_FLAGS)\"" $(COMPILER_FLAGS) -o $@ $< 
    

    然后在C++源文件中你可以有:

    #include <iostream>
    
    #ifndef EXTERNAL_COMPILER_FLAGS
    #define COMPILER_FLAGS "not set"
    #else
    #define COMPILER_FLAGS EXTERNAL_COMPILER_FLAGS
    #endif
    
    int main()
    {
        std::cout << COMPILER_FLAGS << '\n';
    }
    

    如果您不使用Makefile,您应该能够在您使用的任何构建系统中找到等效方法。

    【讨论】:

    • 为什么不直接使用-frecord-gcc-switches
    • @JesperJuhl GCC 文档说它并非在所有架构上都可用,并且格式取决于二进制目标。我也找不到如何从源文件中提取信息。
    【解决方案2】:

    GCC 有 -frecord-gcc-switches 选项。它将导致您的二进制文件记录/包含使用的编译器选项,在一个特殊的部分中,然后可以稍后提取。

    没有这个选项,就无法知道。

    https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html查看详细信息

    【讨论】:

    • 从程序本身中访问它需要一些额外的工作,但是,不是吗?您要么需要找到二进制文件并解析其特定于系统的格式,要么玩一些链接器游戏以获得指向记录开关的可用符号。
    • @NateEldredge 当然,您需要做一些工作来提取信息,但这不是火箭科学。
    • 我不知道。在运行时查找可执行文件并不是那么容易便携和可靠地完成,您必须引入 libelf 或其他东西来解析它。至于链接器游戏,这部分甚至会与程序的其余部分一起加载到内存中吗?
    • 回答我自己的问题,不,它没有。所以这种方法确实需要一些链接器脚本:设置要加载的部分,并提供指向其开始和结束的符号,以便可以遍历它。我想这可能是一个问题。
    • 另一个问题是链接器似乎会合并本节中的重复字符串,因此如果您有不同的源文件使用不同的选项编译,您无法分清哪个是哪个。可能还有办法阻止链接器这样做,但我觉得它正在迅速接近“火箭科学”。
    猜你喜欢
    • 2013-08-05
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多