D9024使无法识别的源文件types

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

cl -c /W3 /Od ioapi.c 

目标文件ioapi.obj按预期方式创build。

但是,如果我用这个条目创build一个makefile

 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命令提示符(其中VS2008 envvariables是预先设置)运行cl.exe。

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

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

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

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

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

问题在于处理/ W3 / Od开关。 由于/符号,似乎make / W3是文件的开始。 所以为了防止这个,我改变了开关来使用 – 而不是/。 例如-W3 -Od,这是MS编译器/链接器可接受的。

所以makefile中所需的变化是:

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