c++ - Automake 用于所有子目录中的共享库

标签 c++ autotools autoconf automake

我目前正在做一个项目,看起来像这样:

root folder

|---plugin manager
|      |---plugin_manager.cpp
|      |---plugin_interface.hpp 
|
|---libraries
|
|---Plugins
|      |
|      |---Plugin1
|      |      |---Plugin1.cpp
|      |      |---Plugin1.hpp
|      |---Plugin2 
|      |      |---Plugin2.cpp
|      |      |---Plugin2.hpp   

我正在为每个插件编译一个 .so,然后用 plugin_manager“加载”它。这很好用。我什至创建了一个简单的 makefile,它能够编译 .so。这是我的制作和配置文件:

配置文件

AC_INIT(My Project, 0.1, my@email, myproject)
AC_PREREQ(2.68)
AC_COPYRIGHT(GNU General Public License)
AM_CONFIG_HEADER([config.h])

AC_CONFIG_MACRO_DIR([m4])
AM_PROG_LIBTOOL
AC_PROG_INSTALL

AC_PROG_CXX
AM_INIT_AUTOMAKE([1.9 foreign])
AC_CONFIG_FILES(Makefile)
AC_ENABLE_SHARED
AC_DISABLE_STATIC
LT_INIT
AC_OUTPUT

生成文件.am

ACLOCAL_AMFLAGS = -I m4
#Generating libtest.so
lib_LTLIBRARIES = libtest.la
#here you can list your source files
libtest_la_SOURCES = Plugin1.cpp
libtest_la_LDFLAGS = -module -avoid-version -export-dynamic

但是,这个 make 文件不是那么用户友好,因为我必须手动将它放在每个插件文件夹中,并且还要更改它的源文件。这就是为什么我想创建另一个,基本上是通过键入 make 在插件管理器文件夹中创建一个可执行文件,并在每个插件文件夹中创建一个 .so。我最近几天一直在阅读有关 autotools 的内容,并尝试实现类似于这些人的东西 here建议,但没有用。所以我希望这里有人对此类 makefile 有经验,可以给我一些提示,告诉我如何解决我的问题。

最佳答案

即使使用通配符 ( http://www.gnu.org/software/automake/manual/html_node/Wildcards.html),Automake 也有限制。

我不认为不使用 bash 脚本生成 Makefile.am 就可以做你想做的事。

但是,如果使用 CMake 对您来说不是问题。 你应该可以用类似的东西来做到这一点

FILE(GLOB dir_list "${CMAKE_CURRENT_SOURCE_DIR}/Plugins/*")
FOREACH(dir_entry dir_list)
   FILE(GLOB file_src "${dir_entry}/*.cpp"
   add_library(plugin_${dir_entry} ${file_src})
ENDFOREACH(dir_entry dir_list)

关于c++ - Automake 用于所有子目录中的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26358409/

相关文章:

windows - Linphone 配置导致多个未定义的 Autotools 宏

autotools - 应该如何重置 AC_CACHE_CHECK?

c++ - CoCreateInstanceEx 在 Win2003 上返回带有无效凭据的 S_OK

c++ - 计算文本文件中整数个数的函数?

c++ - OpenGL - 在倾斜的桌面上移动球

linux - 使用 ptxdist 交叉编译 snort 导致 INADDR_NONE 配置错误

c++ - 将带有 automake 的预构建二进制文件放在哪里?

c++ - 使用 autotools 为共享库正确安装 config.h

c - 如何避免重新定义 VERSION、PACKAGE 等

c++ - 字符串迭代器与读取每一行不兼容