Я пытаюсь взять make-файл, который был написан для mingw в Windows, и заменить его в cl.exe в качестве компилятора. Я удалил флаги, специфичные для GCC, и заменил .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.
И вот мой make-файл
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)
Некоторые проблемы с make-файлом, как написано:
Есть и менее очевидная проблема. Поскольку вы, кажется, используете mingw ‘make’, есть вероятность, что в той же директории, где находится ‘make.exe’, может быть файл ‘link.exe’. Простой запуск ‘link’ из make-файла приведет к выполнению mingw ‘link.exe’, а не MS. Чтобы указать ‘make’ использовать ‘ссылку’ MS ‘, вам необходимо указать полный путь, который обычно может быть выведен из среды, например, ‘$ (VCINSTALLDIR) \ Bin \ link.exe.
Ниже приведен make-файл с необходимыми изменениями.
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)
Увидеть https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx для полного синтаксиса CL (ссылка идет на версию VC ++ 2015, но вы можете выбрать другие версии на странице), и https://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx для ССЫЛКИ.
Других решений пока нет …