【问题标题】:Is this the right way to include a subdir in a makefile这是在makefile中包含子目录的正确方法吗
【发布时间】:2017-08-09 20:02:36
【问题描述】:
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@

CFLAGS  = -pipe -O2 -g `freetype-config --cflags` -c -Wall -Wno-multichar `cat @top_srcdir@/madlax.specs` 
CPPFLAGS= $(CFLAGS) -Woverloaded-virtual -Wnon-virtual-dtor

CC      = @CC@
EXE = jpegtranslator
MLXLIBDIR = @top_srcdir@/src/kits/objs

SUBDIR = libjpeg
SRC := $(SUBDIR)/jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jcdiffct.c \
jchuff.c jcinit.c jclhuff.c jclossls.c jclossy.c jcmainct.c jcmarker.c jcmaster.c jcodec.c \
jcomapi.c jcparam.c jcphuff.c jcpred.c jcprepct.c jcsample.c jcscale.c jcshuff.c jctrans.c \
jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jddiffct.c jdhuff.c \
jdinput.c jdlhuff.c jdlossls.c jdlossy.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \
jdpostct.c jdpred.c jdsample.c jdscale.c jdshuff.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \
jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jmemmgr.c jmemnobs.c jquant1.c jquant2.c \
jutils.c

OBJS =  be_jdatadst.o be_jdatasrc.o be_jerror.o JPEGTranslator.o $(SRC)
OBJDIR := objs

include @top_srcdir@/makefile.rules

all :   $(OBJDIR) $(OBJDIR)/$(EXE)

$(OBJDIR):
    mkdir $(OBJDIR) -C $(SUBDIR)

主要关心的是 $(OBJDIR) -C $(SUBDIR),因为我真的不知道我是否还需要 -I$(SUBDIR) 或 -L$(SUBDIR),或者是否我只是使用-ljpeg

【问题讨论】:

  • 请注意,您需要为子目录中的all 源文件使用$(SUBDIR)/ 前缀。在OBJS 的定义中使用$(SRC) 可能是错误的。而且您可能根本没有要链接的库,因为您将库的所有源代码与最终程序一起构建。

标签: c++ makefile subdirectory lib


【解决方案1】:

首先,-l 选项(小写 L)用于与库链接,-L 用于向链接器库搜索路径列表添加路径。

是的,如果您想使用-l 与非标准位置的库链接,则需要-L

可以也跳过-L-l 选项,而是提供库的完整路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多