4

如果我使用 MS cl 在 cmd 行上运行此 cmd:

cl -c /W3 /Od ioapi.c

目标文件 ioapi.obj 按预期创建。

但是,如果我使用此条目创建一个生成文件:

ioapi.obj: ioapi.c
    cl -c /W3 /Od ioapi.c

上面的 cl 之前有一个选项卡

并运行 make ioapi.obj 然后我得到这个错误:

make ioapi.obj
cl -c /W3 /Od ioapi.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9024 : unrecognized source file type 'C:/MinGW/msys/1.0/W3', object file assumed
cl : Command line warning D9027 : source file 'C:/MinGW/msys/1.0/W3' ignored
cl : Command line warning D9024 : unrecognized source file type 'C:/MinGW/msys/1.0/Od', object file assumed
cl : Command line warning D9027 : source file 'C:/MinGW/msys/1.0/Od' ignored

ioapi.c

cl : Command line warning D9024 : unrecognized source file type 'C:/MinGW/msys/1.0/W3', object file assumed

cl 是 MS VS 2008 编译器。

我已经安装了 minGW,版本是 6 个月前的。

如果我运行 make -n ioapi.c 我会按预期得到这个报告:

cl -c /W3 /Od ioapi.c

我正在从 Visual Studio 2008 命令提示符运行 cl.exe(其中 VS2008 环境变量是预先设置的)。

为什么我会收到这个奇怪的错误以及如何解决它?

我确实想知道这是否是 MS 环境的问题。但是即使我在运行之前运行 vcvars32.bat 文件来设置 MS 环境,也没有什么区别。

我注意到如果我使用这个:

ioapi.obj: ioapi.c
    cl -c ioapi.c

然后错误消失。但我确实需要传入编译器开关。

4

1 回答 1

5

问题是 make 对 /W3 /Od 开关的处理。由于 / 符号,make 似乎认为 /W3 是文件的开头。因此,为了防止这种情况,我将开关更改为使用 - 而不是 /。例如,MS 编译器/链接器可以接受的 -W3 -Od。

因此,所需的 makefile 中的更改是:

ioapi.obj: ioapi.c
    cl -c -W3 -Od ioapi.c
于 2013-06-10T09:30:50.547 回答