【问题标题】:dependency generation for non-gnu compiler非gnu编译器的依赖生成
【发布时间】:2010-02-08 20:57:04
【问题描述】:

我正在使用非 gnu C 编译器,它不支持依赖生成选项(gcc 中的 -MM)。

在这个软件中,他们没有使用 makefile。他们正在使用一些古老的 windows 批处理文件来编译和链接代码。

这些批处理文件没有增量构建。我跟踪了批处理文件,发现最后它执行了这些命令:

compiler.exe -option1 -option2 *.c linker.exe -foo -bar *.obj

编译需要很长时间,因为即使你没有任何修改过的文件,你也必须重新编译所有文件!

我正在寻找从 C 文件生成依赖项的独立工具。但是我没有找到。

编辑:看来我还不够清楚。我无法将批处理文件更改为 makefile,这是一件大事。我只想进行细微的更改以支持增量构建。

编辑:所需的工具是一个独立的工具,它从 c 文件生成依赖项。

【问题讨论】:

    标签: dependencies compilation


    【解决方案1】:

    您的项目中有两个依赖项。

    1. C 文件编译为 OBJ 文件。
    2. C 文件包括头文件。更改的头文件需要编译 C 包含文件。

    第一个主题可以在您的 makefile 中使用推理规则编写。这允许仅枚举用于链接的 OBJ 文件。

    第二个主题是查找包含的头文件。我不知道一个独立的工具。但是您可以尝试使用 C 预处理器编写自己的代码。你需要解析这个命令的输出:

    cl -E -I<your_include_path> *.c | find "#line"
    

    引号中的文件名给出了依赖关系。如果文件名以 .c 结尾,则它是一个目标。在其他地方它是一个依赖项。

    【讨论】:

    • 对不起,我先误会了。我会试试这个:)
    【解决方案2】:

    为什么不获取 Make(在 Cygwin 下)并创建使用您的 compiler.exe 作为 CC 的 Makefile?

    【讨论】:

    • 如果你只想用make或者gcc就不用cygwin了。
    • 我发现没有 Cygwin 的 Windows 是非常不适合的开发环境。当然你可以在没有它的情况下运行 Make,但你为什么要这样做呢?
    • 问题不在makefile中。问题在于使用 gcc -MM 生成的依赖项。
    【解决方案3】:

    GCC 产生的依赖信息实际上是由 gcc 驱动程序调用的 GNU make 生成的。您可以从很多地方获得适用于 Windows 的 GNU make 版本,包括 http://www.mingw.org/wiki/msys。您也可以考虑在 Windows 上使用 GCC - 您可以在 http://tdragon.net/recentgcc 获得 MinGW 版本。

    【讨论】:

    • 我只是想确定一下,如果没有 gcc,如何生成依赖项?当然我可以使用GCC来生成依赖,但是如果有独立的工具会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2012-07-23
    • 2021-01-26
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多