[英]Replacing mingw g++ with MS cl.exe in makefile
我正在尝试获取在Windows上为mingw编写的makefile,并在cl.exe中交换作为编译器。 我删除了特定于GCC的cflag,然后将.o替换为.obj。 我根本没有更改规则,所以我不知道这是否应该成为问题。
我收到以下错误...
cl /link build/WavFileTool.obj src/WavFileTool.cpp
process_begin: CreateProcess(NULL, cl /link build/WavFileTool.obj src/WavFileTool.cpp, ...) failed.
make (e=2): The system cannot find the file specified.
这是我的makefile
CC := cl
CFLAGS := /link
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
MAIN := WavFileTool
TARGET := wavfiletool.exe
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.obj)
$(BIN_DIR)/$(TARGET): CREATE_DIRS $(BUILD_DIR)/$(MAIN).obj $(OBJECTS)
$(CC) $(OBJECTS) $@
$(BUILD_DIR)/$(MAIN).obj: $(SRC_DIR)/WavFileTool.cpp
$(CC) $(CFLAGS) $@ $<
$(BUILD_DIR)/%.obj: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
$(CC) $(CFLAGS) $@ $<
CREATE_DIRS:
if not exist $(BIN_DIR) mkdir $(BIN_DIR)
if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
CLEAN:
if exist $(BUILD_DIR) rmdir /Q /S $(BUILD_DIR)
发布的makefile的一些问题:
还有一个不太明显的问题。 由于您似乎正在使用mingw,因此“ make”很有可能在与“ make.exe”相同的目录中存在“ link.exe”。 简单地从makefile运行“ link”将执行mingw“ link.exe”而不是MS。 要指示“ make”使用MS“ link”,您需要提供完整路径,通常可以从环境中推断出该路径,例如“ $(VCINSTALLDIR)\\ bin \\ link.exe”。
下面是带有必要更改的makefile。
CC := cl
CFLAGS := /c
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
MAIN := WavFileTool
TARGET := wavfiletool.exe
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.obj)
$(BIN_DIR)/$(TARGET): CREATE_DIRS $(BUILD_DIR)/$(MAIN).obj $(OBJECTS)
$(VCINSTALLDIR)/bin/link /out:$@ $(OBJECTS)
$(BUILD_DIR)/$(MAIN).obj: $(SRC_DIR)/WavFileTool.cpp
$(CC) $(CFLAGS) /Fo$@ $<
$(BUILD_DIR)/%.obj: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
$(CC) $(CFLAGS) /Fo$@ $<
CREATE_DIRS:
if not exist $(BIN_DIR) mkdir $(BIN_DIR)
if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
CLEAN:
if exist $(BUILD_DIR) rmdir /Q /S $(BUILD_DIR)
有关完整的CL语法,请参见https://msdn.microsoft.com/zh-cn/library/19z1t1wy.aspx (链接指向VC ++ 2015版本,但您可以在页面上选择其他版本),以及https:/ /msdn.microsoft.com/en-us/library/y0zzbyt4.aspx(用于LINK)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.