【问题标题】:Including #foo preprocessor directives at compile time (GNU tools)在编译时包括#foo 预处理器指令(GNU 工具)
【发布时间】:2014-09-22 13:56:54
【问题描述】:

我目前遇到这样的问题,实际上是由包维护者引起的,他们根本不认为某个预处理器定义不可用,直到依赖项中所需的某个工具包包的版本 X (目前处于测试阶段)。只需在基本系统的头文件中添加一个额外的#define 即可解决此问题,从而使项目再次正常编译。
但是,如果我没有系统的 root 访问权限怎么办?我还可以在编译时添加#define new_macro "i am from the future",例如。 G。到configure?
在阅读这件事时,我认为它可能与 DEFS 环境变量一起工作,但显然这并不意味着用于 C 预处理器指令。
那么这到底能不能做到呢?

【问题讨论】:

  • gcc -DSOME_MACRO="some_value"?
  • 是的,这基本上可以工作,但这需要我直接编辑 gcc 参数,我实际上想避免这种情况。这和直接编辑依赖包的头文件一样尴尬。
  • 您应该能够执行类似./configure CC='gcc -Dnew_macro="i am from the future"'(语法?)的操作,将文件中的实际gcc 命令替换为one+parameter?
  • 谢谢,但不幸的是,引号中的字符串是个大问题。即使用反斜杠转义它们也不起作用。直到我真正将#define 破解到/usr 树中的文件中,项目才会最终编译。否则,它总是会将常量 first-second 拆分为 firstsecond,从而中断每个函数调用。

标签: configure c-preprocessor preprocessor-directive gnu-toolchain


【解决方案1】:

谢谢,但不幸的是引号中的字符串是个大问题

创建一个文件,例如~/somedir/mycompiler,内容为:

#!/bin/sh
gcc -Dnew_macro="i am from the future" "$@"

添加可执行权限chmod +x ~/somedir/mycompiler,然后将其作为参数传递给configure

./configure CC="$HOME"/somedir/mycompiler ...

依次配置脚本将使用该脚本编译所有内容,将-D 传递到各处,引号将被sh 正确解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多