Condense Makefile.am



我正在使用autotools构建一个项目。我有configure.ac,makefile.amautogen.sh。这一切都很好。我的Jenkins管道可以拾取并运行它。我的问题是makefile.am越来越长。最近我在我的项目中添加了一些第三方供应商代码。

这是当前makefile.am

AUTOMAKE_OPTIONS = foreign subdir-objects
bin_PROGRAMS = MAIN_Application
MAIN_Application_LDADD = -lsocketcan -lpthread -lm
AM_CPPFLAGS = 
-I$(srcdir)/include 
-I$(srcdir)/include/utilities 
-I$(srcdir)/include/comms 
-I$(srcdir)/include/config_parsing 
-I$(srcdir)/vendor/my_vendor/host/include 
-I$(srcdir)/vendor/my_vendor/host/source/lib/comm_mgr/inc 
-I$(srcdir)/vendor/my_vendor/host/source/lib/mem_pool/inc 
-I$(srcdir)/vendor/my_vendor/host/source/lib/osal/inc 
-I$(srcdir)/vendor/my_vendor/production/source/lib/FFT 
-I$(srcdir)/vendor/my_vendor/public/common 
-I$(srcdir)/vendor/my_vendor/public/host 
-I$(srcdir)/vendor/my_vendor/public/production
MAIN_Application_SOURCES = 
src/main.cpp 
src/scheduler.c 
src/thread_health.c 
src/signal_handler.c 
src/utilities/time_conversions.c 
src/utilities/ring_buffer.c 
src/utilities/logger.c 
src/utilities/string_operations.c 
src/config_parsing/file_operations.c 
src/config_parsing/config_parser.c 
src/comms/can.c 
src/comms/can_ring_buffer.c 
vendor/my_vendor/production/source/lib/FFT/FFT.c 
vendor/my_vendor/production/source/PROD_lib.c 
vendor/my_vendor/host/source/HLB_helper.c 
vendor/my_vendor/host/source/HLB_nscm.c 
vendor/my_vendor/host/source/HLB_apcm.c 
vendor/my_vendor/host/source/HLB_fwload.c 
vendor/my_vendor/host/source/HLB_host.c 
vendor/my_vendor/host/source/HLB_noise_floor.c 
vendor/my_vendor/host/source/lib/mem_pool/src/mem_pool.c 
vendor/my_vendor/host/source/lib/comm_mgr/src/comm_mgr_lib.c 
vendor/my_vendor/host/source/lib/osal/src/osal.c 
vendor/my_vendor/host/source/HLB_legacy_commands.c 
vendor/my_vendor/host/source/HLB_protocol.c 

我真的必须单独包括每个.c文件吗?为什么vendor/my_vendor/host/*/**不能工作?如何压缩makefile.am?

Autotools开发人员认为明确列出所有源文件是最佳实践。这避免了像测试或调试源之类的东西潜入到发行包中。

你不能使用**,因为这个语法是一个非标准的扩展,特别在shell中可用,比如bashzsh,它不被标准POSIX globbing支持(这是它的glob扩展的用途)。

我认为在Makefile.am中使用简单的globbing(即*.c)会起作用,但当然你仍然需要使用每个目录。

再加一句:

你也可以让你的makefile更"整洁"把资料分成几个部分。例如,你可以输入:

MAIN_Application_SOURCES = 
src/main.cpp 
src/scheduler.c 
src/thread_health.c 
src/signal_handler.c
MAIN_Application_SOURCES += 
src/utilities/time_conversions.c 
src/utilities/ring_buffer.c 
src/utilities/logger.c 
src/utilities/string_operations.c
MAIN_Application_SOURCES += 
src/config_parsing/file_operations.c 
src/config_parsing/config_parser.c
MAIN_Application_SOURCES += 
src/comms/can.c 
src/comms/can_ring_buffer.c
MAIN_Application_SOURCES += 
vendor/my_vendor/production/source/lib/FFT/FFT.c 
vendor/my_vendor/production/source/PROD_lib.c 
vendor/my_vendor/host/source/HLB_helper.c 
vendor/my_vendor/host/source/HLB_nscm.c 
vendor/my_vendor/host/source/HLB_apcm.c 
vendor/my_vendor/host/source/HLB_fwload.c 
vendor/my_vendor/host/source/HLB_host.c 
vendor/my_vendor/host/source/HLB_noise_floor.c 
vendor/my_vendor/host/source/lib/mem_pool/src/mem_pool.c 
vendor/my_vendor/host/source/lib/comm_mgr/src/comm_mgr_lib.c 
vendor/my_vendor/host/source/lib/osal/src/osal.c 
vendor/my_vendor/host/source/HLB_legacy_commands.c 
vendor/my_vendor/host/source/HLB_protocol.c

之类的,或者你甚至可以使用其他变量,然后把它们加在一起。也许这有助于提高可读性。

最新更新