如何在Makefile中指定.Am (auto make)用于在编译后将库对象文件(.lo)和对象文件(.o)保存在单独

How to specify in Makefile.am(auto make) for saving library object files(.lo) and object files(.o) in separate folder after compilation

本文关键字:文件 对象 存在 单独 保存 lo 用于 Makefile Am make auto      更新时间:2023-10-16

在Makefile。我有:

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文件在编译后移动到一个单独的子文件夹?

您可以尝试VPATH构建。对于为什么.lo.o文件需要放在其他地方有一些见解将有助于回答您的问题。

一个稍微不同的变体是DESTDIR安装,其中库等被复制,而.o文件不被复制。

首先,您可以将普通的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
但真正的问题是:为什么你真的想这么做?你想要完成什么?