如果我使用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