C语言 MS-Windows MakeFIles



我正在尝试为ms-windows应用程序编写makefile。这个想法很简单。我必须在构建目录中生成输出.o,.exe文件。我已经写了makefile,它将编译源目录,但不能生成构建目录和编译过程是完美的工作。

请查看makefile。看起来我不能使用mkdir命令生成构建目录。

CC= gcc
CFLAG= -g -Wall
TARGET_EXEC ?= test.exe
RELEASE=    Release
RELEASE_BIN= bin
RELEASE_CNFG= config
RELEASE_LOG= log
RELEASE_DATA=data
BUILD_DIR ?= build
SRC_DIRS ?= src
#OS dependent cleaning command 
ifdef OS
RM = rd /s /q
else
ifeq ($(shell uname), Linux)
RM = rm -f
endif
endif
SRCS := $(wildcard $(SRC_DIRS)/*.c)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_DIRS := $(wildcard $(SRC_DIRS) -type d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
#find the directory for the include file
#this is best otpion to search curl directory
USR_INC := /usr/include
FILES := 
INCLUDES = -Iinclude
LIBS= -lm
CPPFLAGS ?= $(INC_FLAGS) -MMD -MP
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
$(CC) $(OBJS) -o $@  $(LIBS) $(LLFLAGS)
# c source
$(BUILD_DIR)/%.c.o: %.c
@echo Compiling $<
# here I am trying to generate the file into the build/src/xxxc.o
@ $(MKDIR_P) $@      
$(CC) $(CFLAG) -c $< -o $@ $(INCLUDES)
.PHONY: install
install:
@ echo "Installing..........."
@ echo "Creating $(RELEASE) Directory..."
@ $(MKDIR_P) $(RELEASE)
@ echo "Creating $(RELEASE)/$(RELEASE_BIN) Directory.."
@ $(MKDIR_P) $(RELEASE)/$(RELEASE_BIN)
@ echo "Creating $(RELEASE)/$(RELEASE_CNFG) Directory..."
@ $(MKDIR_P) $(RELEASE)/$(RELEASE_CNFG)
@ echo "Creating $(RELEASE)/$(RELEASE_LOG) Directory..."
@ $(MKDIR_P) $(RELEASE)/$(RELEASE_LOG)
@ echo "Creating $(RELEASE)/$(RELEASE_DATA) Directory..."
@ $(MKDIR_P) $(RELEASE)/$(RELEASE_DATA)
@ echo "Makking Release folder ready.."
@cp $(BUILD_DIR)/$(TARGET_EXEC) $(RELEASE)/$(RELEASE_BIN)       
@ echo "copy certificate file to Release"
@cp -r cert $(RELEASE)
@ echo "copy .ini file to Release"
@cp -r config/*.ini $(RELEASE)/$(RELEASE_CNFG)
.PHONY: clean
clean:
$(RM) $(BUILD_DIR) $(RELEASE)

-include $(DEPS)
MKDIR_P ?= mkdir

我理解你的努力。但是请注意,平台和依赖关系的一些差异将迫使您创建类似于"配置"的东西。和"老爷;一步。

所以你将开始在一个你迟早会发明的工具中生成一个自定义的Makefile:)。

在注释中提到:This has already done andcmake是现在的"行业标准">

它可以在Windows, Linux, OSX等平台上使用,并具有强大的工具链支持。看看吧!

的例子:

cmake_minimum_required(VERSION 3.4)
project(HelloWorldCMake)
set(MY_SOURCES
hello_world.c
)
add_executable(HelloWorldCMake
${MY_SOURCES}
)

和hello_world.c

#include <stdio.h>
int main()
{
printf("Hello world (cmake)");
}

如果您想链接其他库,请研究CMake命令:target_link_librarieshttps://cmake.org/cmake/help/latest/command/target_link_libraries.html

最新更新