非gnu编译器的依赖项生成

时间:2010-02-02 15:00:10

标签: dependencies compilation

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

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

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

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

编译需要花费很长时间,因为即使您没有任何修改过的文件,也必须再次编译所有文件!

我正在寻找一个独立的工具,它可以从C文件生成依赖项。但我找不到任何人。

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. C文件被编译为OBJ文件。
  2. C文件包含头文件。更改的头文件需要编译C包含文件。
  3. 可以在makefile中使用推理规则编写第一个主题。这允许只枚举将用于链接的OBJ文件。

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

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

    引号中的文件名surrounden给出了依赖关系。如果文件名以.c结尾,那么它就是目标。在其他地方,这是一种依赖。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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