我有一个应用程序,其中包含多个子目录,我想以非递归方式进行编译。为此,我将所有子目录的源文件分别存储在几个变量中,然后在最终的源代码集合中使用这些变量。类似于以下内容:
GUI_SOURCEFILES = Gui/MainWindow.cc \
Gui/StatusBar.cc
...
foo_SOURCES = $(GUI_SOURCEFILES) \
$(DATABASE_SOURCEFILES) \
main.cc
现在,我必须为所有GUI源文件写“Gui/”,并在所有数据库文件前面写“Db\”。我认为应该可以自动创建此前缀,但我找不到正确的方法。我尝试了通常的制作方式:
GUI_SOURCEFILES = MainWindow.cc \
StatusBar.cc
...
foo_SOURCES = $(GUI_SOURCEFILES) \
$(patsubst %,Gui/%,$(DATABASE_SOURCEFILES)) \
main.cc
但是,Autotools根本不会编译这个Makefile.am
文件。
有没有办法让Autotools为我完成这个任务呢?
$(addprefix Gui/, $(DATABASE_SOURCEFILES))
是怎么样的呢? - dma_ksrc/Makefile.am:12: addprefix Gui/, $(GUI_SOURCEFILES: non-POSIX variable name
src/Makefile.am:12: (probably a GNU make extension)
。我认为必须有一种非常特定的Autotools/m4方法来解决这个问题,但是我从未广泛地使用过其中任何一个。所有的Makefile方法可能都行不通。 - LiKaoautotools
更新到最新版本,并确保make
是唯一的,而且它是GNU make。从这里和那里来看,我认为你有一个环境问题。你在运行Linux吗? - dma_kaddprefix
或patsubst
的部分将传递给最终的Makefile,而不是由autotools处理。 - LiKao