如何在Makefile.am(auto make)中指定在编译后将库对象文件(.lo)和目标文件(.o)保存在单独的文件夹中

时间:2015-10-08 09:24:42

标签: c++ makefile automake

在Makefile.am中,我有:

lib_LTLIBRARIES = libmyproject.la
libmyproject_la_LDFLAGS = -shared
libmyproject_la_SOURCES = \
    sample1.cpp \
    sample1.h \
    sample2.cpp \
    sample2.h
AM_CPPFLAGS = \
    -Wall \
    -Wextra
INCLUDES = \
    $(OPENSSL_CFLAGS)
LIBS = \
    -L/usr/lib/openssl-1.0.0/ \
    -lssl
EXTRA_DIST = xxxxxx

这很好用,我在同一条路径中获取.lo.o个文件。

如何在编译后将所有.lo.o文件移至单独的子文件夹?

2 个答案:

答案 0 :(得分:0)

首先,您可以将普通的make规则混合到Makefile.am

因此,将以下内容添加到Makefile.am应该可以执行您想要的操作:

.PHONY: copy_obj
# when building 'all', we *also* want the 'copy_obj' target
all: copy_obj
# but the 'copy_obj' target can only be executed once 'libmyproject.la' is done
copy_obj: libmyproject.la
      mkdir -p objdir
      cp *.lo *.o objdir

甚至:

.PHONY: copy_obj

all: copy_obj
copy_obj: $(libmyproject_la_OBJECT)
      mkdir -p objdir
      cp $^ objdir

但真正的问题是:为什么你真的想要这样做吗?你想做什么?

答案 1 :(得分:0)

您可以尝试VPATH版本。了解@implementation CustomLayout -(void)prepareLayout{ [super prepareLayout]; // [self invalidateLayout]; if(self.collectionView){ CGSize newItemSize=self.itemSize; // Number of items per row int itemsPerRow=3; float totalSpacing=self.minimumLineSpacing*(itemsPerRow-1); newItemSize.width=(self.collectionView.bounds.size.width -totalSpacing)/itemsPerRow; if(self.itemSize.height>0){ float itemAspectRatio=self.itemSize.width/self.itemSize.height; newItemSize.height=newItemSize.width/itemAspectRatio; } [self setItemSize:newItemSize]; } } @end .lo文件为何需要在其他地方进行操作有助于回答您的问题。

对此有一些不同的变化是DESTDIR安装,其中libs等被复制而.o文件没有。