Makefile没有拉入包括依赖

时间:2016-04-30 10:08:24

标签: makefile cygwin mingw

这是我设置的目录结构:

Matrix
│   Makefile
│
├───bin
├───include
│       matrix.h
│
├───lib
├───obj
├───rc
│       matrix.rc
│
└───src
        matrix.c
        matrix_mem.c

这里是Makefile:

# This Makefile will build the Matrix Library.

TOOLCHAIN :=    C:\MinGW
SRCTREE :=  C:\Users\admin\Desktop\Matrix\Matrix

CC :=       $(TOOLCHAIN)\bin\gcc.exe
AR :=       $(TOOLCHAIN)\bin\ar.exe
WINDRES :=  $(TOOLCHAIN)\bin\windres.exe

SRCDIR :=   $(SRCTREE)\SRC
OUTDIR :=   $(SRCTREE)\BIN
OBJDIR :=   $(SRCTREE)\OBJ
RESDIR :=   $(SRCTREE)\RC
LIBDIR :=   $(SRCTREE)\LIB
INCDIR :=   $(SRCTREE)\INCLUDE

CFLAGS :=   -O3 -std=gnu89 -Wall
CFLAGS_EXTRA :=

OBJS := $(shell find $(OBJDIR) -name '*.o')
DEPS := $(OBJS:.o=.d)
-include $(DEPS)

all: dll

dll: CFLAGS_EXTRA := -DMATRIX_USE_DLL -DDLL_EXPORTS
dll: matrix.dll

static: CFLAGS_EXTRA :=
static: matrix.lib

matrix.dll: matrix_mem.o matrix.o resource.o

matrix.lib: matrix_mem.o matrix.o

%.o: $(SRCDIR)\%.c
    $(CC) $(CFLAGS) -I $(INCDIR) $(CFLAGS_EXTRA) -MM -MT $(OBJDIR)\$@ -MF $(patsubst %.o,%.d,$(OBJDIR)\$@) $<
    $(CC) -c $(CFLAGS) -I $(INCDIR) $(CFLAGS_EXTRA) -o $(OBJDIR)\$@ $<
    @echo ...$(OBJS)...

%.dll: 
    $(CC) -shared -s -o $(OUTDIR)\$@ $(patsubst %,$(OBJDIR)\\%,$^) -Wl,--subsystem,windows,--output-def,$(OUTDIR)\$*.def,--out-implib,$(OUTDIR)\$*.lib

%.lib: 
    $(AR) -ru $(OUTDIR)\$@ $(patsubst %,$(OBJDIR)\\%,$^)

resource.o: $(RESDIR)\matrix.rc
    $(WINDRES) -i $< -o $(OBJDIR)\$@

clean::
    -rm $(OBJDIR)\matrix.o
    -rm $(OBJDIR)\matrix_mem.o
    -rm $(OBJDIR)\matrix.d
    -rm $(OBJDIR)\matrix_mem.d
    -rm $(OBJDIR)\resource.o
    -rm $(OUTDIR)\matrix.def
    -rm $(OUTDIR)\matrix.lib
    -rm $(OUTDIR)\matrix.dll

MakefileMinGWCygwin下正常工作。 我仍然难以让include依赖工作。 似乎没有包含.d个文件。由于代码在GCC个变种中编译得很好,我想尝试在Linux上编译它。我想对Makefile进行最少的更改。 我知道我必须更改路径样式和其他编译选项。 但是,截至此处,如何正确处理包含依赖关系的make,而不需要与shell进行多少交织?我使用make 3.80版本。 这是一个最小的源实现:

matrix.h:

/*----------------------------- matrix.h ------------------------------*/
#ifndef __MATRIX_H_INCLUDED__
#define __MATRIX_H_INCLUDED__

#ifdef _WIN32
    #ifdef MATRIX_USE_DLL
        #ifdef DLL_EXPORTS
            #define MATRIX_API __declspec(dllexport)
        #else
            #define MATRIX_API __declspec(dllimport)
        #endif
    #else
        #define MATRIX_API
    #endif

    #define MATRIX_CALL __stdcall
#else
    #define MATRIX_API
    #define MATRIX_CALL
#endif

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _Matrix {
    double **data;
    int m;
    int n;
} Matrix;

MATRIX_API void MATRIX_CALL dummy_func2();
MATRIX_API void MATRIX_CALL dummy_func2();

#ifdef __cplusplus
}
#endif

#endif
/*---------------------------------------------------------------------*/

matrix.c:

/*----------------------------- matrix.c ------------------------------*/
#include "matrix.h"

MATRIX_API void MATRIX_CALL dummy_func1() {
    return;
}
/*---------------------------------------------------------------------*/

matrix_mem.c:

/*--------------------------- matrix_mem.c ----------------------------*/
#include "matrix.h"

MATRIX_API void MATRIX_CALL dummy_func2() {
    return;
}
/*---------------------------------------------------------------------*/

0 个答案:

没有答案