Automake中能否为_PROGRAMS变量内所有程序统一设置_CFLAGS、_LDADD等变量
完全可以,Automake支持多种方式批量给所有测试目标统一配置编译、链接参数,不需要逐个声明,以下是两种最常用的实现方案:
方案1:子目录独立构建(最推荐)
把所有测试代码单独放在tests/子目录下,在该目录下编写独立的Makefile.am,该文件下的编译参数完全独立,不会影响上层库的编译逻辑:
# tests/Makefile.am TESTS = foo bar check_PROGRAMS = $(TESTS) # 仅作用于当前tests目录下所有目标的编译参数 AM_CFLAGS = -O0 -g --coverage # 仅作用于当前tests目录下所有目标的链接参数 LDADD = $(top_builddir)/src/libmylib.la
之后在项目根目录的Makefile.am中添加子目录声明即可:
SUBDIRS = src tests
方案2:单Makefile场景批量赋值
如果不想拆分多目录,所有代码都在同一个目录下维护,可以用GNU Make的模式替换语法,批量给所有测试目标生成对应的配置:
# 你现有的测试列表定义 TESTS = %reldir%/foo\ %reldir%/bar\ # 其他测试项 check_PROGRAMS = $(TESTS) # 批量给所有测试目标设置CFLAGS $(check_PROGRAMS:%=%_CFLAGS) = -O0 -g --coverage # 批量给所有测试目标设置链接依赖 $(check_PROGRAMS:%=%_LDADD) = $(top_builddir)/src/libmylib.la
如果你使用的是Automake 1.13及以上版本,还可以用更简洁的内置check_AM_CFLAGS变量,专门作用于所有check类目标:
check_AM_CFLAGS = -O0 -g --coverage
内容的提问来源于stack exchange,提问作者Marcus Harrison
相关产品推荐
相关产品推荐

