【问题标题】:Makefile to compile shared library with foldersMakefile 用文件夹编译共享库
【发布时间】:2016-09-06 13:09:13
【问题描述】:

我需要写一个Makefile来编译下一个项目:

project
   \_ src 
       \_ *.c
   \_ include 
       \_ *.h
   \_ build
       \_ Makefile
   \_ obj
       \_ output_library.so

我是 Makefile 语言的新手,现在我将所有文件都放在同一个目录中,并使用这个 Makefile 进行编译:

SRC=../src                                                                      
OUTDIR=../obj     
CFLAGS=-ggdb -O1 -fPIC -Wall                                                                                                                
LDFLAGS=-shared -ggdb -fPIC -Wall                                                                                                           
all: libX.so                                                                                                                  

libX.so: X1.o X2.o X3.c                                                                
    $(CC) -o $@ $^ $(LDFLAGS)                                                   

clean:                                                                          
    rm *.so *.o || true

但我收到提示:

make: *** 没有规则来制作目标“X1.o”,需要 'libX.so'。

我觉得我没有使用 $SRC 和 $OUTDIR 很明显

【问题讨论】:

  • 你到底在问什么?该问题包含详细信息,但我找不到任何关于您的实际问题的描述。
  • (您可以在我对上面链接的 Q/A 的回答中找到您需要的所有内容。这可能有点复杂,但您应该能够根据您的结构进行调整)
  • 谢谢,尽管您的代码向我提出了很多问题,例如,执行 SOURCEDIR := .. (Vs) SOURCEDIR=.. 有什么区别。
  • 你可以找到“=”和“:="in the manual的解释。

标签: c linux makefile


【解决方案1】:

所以我终于明白了。 恐怕不是最聪明的方法。

生成文件

SRC=../src
IDIR =../include
OUTDIR=../obj
CC=cc
CFLAGS=-I$(IDIR)
LDFLAGS=-shared -ggdb -fPIC -Wall -lnsl

ODIR=../obj
#LDIR =../lib

_DEPS = header.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = X1.o X2.o X3.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: $(SRC)/%.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

libX.so: $(OBJ)
        gcc -o $(ODIR)/$@ $^ $(CFLAGS) $(LDFLAGS)

.PHONY: clean

clean:
        rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~

我不确定其中的一些陈述:/但它有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2023-03-07
    • 2018-04-04
    • 2010-10-27
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多