我目前正在开展一个项目,如下所示:
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。这是我的make和配置文件:
configure.ac
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
Makefile.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的经验,可以给我一个如何解决我的问题的小费。
答案 0 :(得分:1)
即使使用通配符(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)