makefile问题,想像vs一样将目标文件,输出文件存放在指定文件夹,而不是在源文件的目录

时间:2021-08-24 12:46:15
SRCDIR=src/
OBJSDIR=../temp/client_net/linux/
TARDIR=../lib/
SRCS=$(wildcard src/*.cpp)
OBJS=$(addprefix $(OBJSDIR), $(notdir $(patsubst %.cpp, %.o, $(SRCS))))
TAR=$(addprefix $(TARDIR), libclient_net.so)
CXXFLAGS=-Iinterface -I.. -fpic
LDFLAGS=-L../lib -lACE -shared
$(shell "if [ ! -f $(OBJSDIR) ]; then mkdir -p $(OBJSDIR) fi")

.PHONY:all clean

all:$(TAR)

$(TAR):$(OBJS)
        $(CXX) $(LDFLAGS) -o $@ $^

$(OBJSDIR)%.o:$(SRCDIR)%.cpp
        $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

clean:
        @rm $(OBJS) $(TAR)


makefile如上,但是创建目标文件目录总是失败,有什么其他方法吗?
$(shell "if [ ! -f $(OBJSDIR) ]; then mkdir -p $(OBJSDIR) fi")这个一直失败 。。。

7 个解决方案

#1


寻大神帮助,指点迷津

#2


我一般是这么处理的


install:
    @if [ ! -f $(OBJSDIR) ];then \
    mkdir -p $(OBJSDIR)  \
    fi \

#3


引用 2 楼 songsong33 的回复:
我一般是这么处理的


install:
    @if [ ! -f $(OBJSDIR) ];then \
    mkdir -p $(OBJSDIR)  \
    fi \


麻烦在帮我看看,一直报错误
if [ ! -f ../temp/client_net/linux/ ]; then \
                mkdir -p ../temp/client_net/linux/ \
        fi
/bin/sh: -c: line 3: syntax error: unexpected end of file
make: *** [dir] Error 1

#4


makefile格式要求比较严格,@if [ ! -f $(OBJSDIR) ];then \前面应该是个tab键,不能是空格;

#5


ifeq ($(wildcard $(OBJSDIR)), )
mkdir -p $(OBJSDIR)
endif

#6


问题以解决,多谢楼上两位
还是shell不熟练

if [ ! -d $(OBJSDIR) ]; then \
    mkdir -p $(OBJSDIR); \
fi


后面需要;做间隔符
if语法好多空格啊,蛋痛死

#7


引用 5 楼 qiyu1988 的回复:
ifeq ($(wildcard $(OBJSDIR)), )
mkdir -p $(OBJSDIR)
endif


虽然没试过,想法应该也可以

#1


寻大神帮助,指点迷津

#2


我一般是这么处理的


install:
    @if [ ! -f $(OBJSDIR) ];then \
    mkdir -p $(OBJSDIR)  \
    fi \

#3


引用 2 楼 songsong33 的回复:
我一般是这么处理的


install:
    @if [ ! -f $(OBJSDIR) ];then \
    mkdir -p $(OBJSDIR)  \
    fi \


麻烦在帮我看看,一直报错误
if [ ! -f ../temp/client_net/linux/ ]; then \
                mkdir -p ../temp/client_net/linux/ \
        fi
/bin/sh: -c: line 3: syntax error: unexpected end of file
make: *** [dir] Error 1

#4


makefile格式要求比较严格,@if [ ! -f $(OBJSDIR) ];then \前面应该是个tab键,不能是空格;

#5


ifeq ($(wildcard $(OBJSDIR)), )
mkdir -p $(OBJSDIR)
endif

#6


问题以解决,多谢楼上两位
还是shell不熟练

if [ ! -d $(OBJSDIR) ]; then \
    mkdir -p $(OBJSDIR); \
fi


后面需要;做间隔符
if语法好多空格啊,蛋痛死

#7


引用 5 楼 qiyu1988 的回复:
ifeq ($(wildcard $(OBJSDIR)), )
mkdir -p $(OBJSDIR)
endif


虽然没试过,想法应该也可以