将大型软件项目移植到 tup 构建系统的技巧



将结构合理的源代码树中包含数千个.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。

相关内容

  • 没有找到相关文章

最新更新