将结构合理的源代码树中包含数千个.cpp文件和相关标头的软件项目移植到tup构建系统的最佳方法是什么?
如果树看起来像:
colors/
primaries/
red.cpp
green.cpp
blue.cpp
fruity/
orange.cpp
grape.cpp
grayscale/
white.cpp
gray.cpp
black.cpp
some/annoying/nesting/animals/
horse.cpp
bear.cpp
对于数十个类别,每个类别中有数十个目标文件,编写一次性使用shell脚本来转储每个目录中的Tupfiles似乎确实是一个相当不优雅的解决方案,即使由于共享Tuprules.tup,它们~大部分相似。 什么是正确的,"最佳实践",希望便携式的方式来构建这样的项目与tup?
随着最近添加的(仍然没有很好的文档记录)LUA解析器,您可以避免每个目录有一个Tupfile。看看这里 http://gittup.org/tup/lua_parser.html 阅读有关 Tupdefault 的信息.lua
此外 - 通过最近的更改,允许在不同文件夹中输出文件,您可以进一步简化它。您可以在"某处"编译文件,将它们添加到全局组中,然后 - 当您需要它时,将它们全部链接/存档。
Simple Tuprules.tup:
TOP = $(TUP_CWD)
!cc = |> gcc $(CFLAGS) -c %f -o %o |> %B.o $(TOP)/<objects>
简单的 Tupfile 仅用于编译(通用的,不修改标志或 sth):
include_rules
: foreach *.c |> !cc |>
用于编译和最终链接的简单 Tupfile(注释如上):
include_rules
: foreach *.c |> !cc |>
: $(TOP)/<objects> |> gcc %<objects> -o %o |> application.exe
不幸的是,我(还)不知道如何将这个特定功能(全局组)与 LUA 解析器一起使用。我什至在tup用户邮件列表中询问了这个问题。
在 tup 手册页中,tup 支持运行外部 shell 脚本:
run ./script args
Runs an external script with the given arguments to generate
:-rules. This is an advanced feature that can be used when the
standard Tupfile syntax is too simplistic for a complex program.
The script is expected to write the :-rules to stdout. No other
Tupfile commands are allowed - for example, the script cannot
create $-variables or !-macros, but it can output :-rules that use
those features. As a simple example, consider if a command must be
executed 5 times, but there are no input files to use tup's
foreach keyword. An external script called 'build.sh' could be
written as follows:
您可以触发一个脚本来生成必要的 tup 规则,但我认为这是不可移植的,因为您依赖于 shell。