我正在使用autotools构建一个项目。我有configure.ac
,makefile.am
和autogen.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中可用,比如bash
和zsh
,它不被标准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
之类的,或者你甚至可以使用其他变量,然后把它们加在一起。也许这有助于提高可读性。