среда, 20 апреля 2016 г.

[prog] Смотрю тут в доку по Bazel-у и вижу что-то очень знакомое...

Смотрю в раздел Getting Started для C++ проектов в Google-овской системе сборки Bazel. В качестве примера они предлагают несложную структуру проекта и содержимое нескольких проектных файлов для сборки. Интересно сравнить, как это выглядело бы с использованием Mxx_ru. Итак:

Дерево каталогов для демонстрационного примера:

BazelMxx_ru
[workspace]/
    WORKSPACE
    a/
        BUILD
        a.h
        a.cc
    b/
        BUILD
        b.h
        b.cc
        main.cc
[workspace]/
    build.rb
    a/
        a.rb
        a.h
        a.cc
    b/
        b.rb
        b.h
        b.cc
        main.rb
        main.cc

В проектных файлах главное отличие было бы в том, что вместо одного файла b/BUILD в Mxx_ru было бы два: Первый бы описывал библиотеку b (файл b/b.rb), а второй -- exe-шник main (файл b/main.rb):

BazelMxx_ru
cc_library(
    name = "b",
    srcs = ["b.cc"],
    hdrs = ["b.h"],
)

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [":b"],
)
require 'mxx_ru/cpp'
MxxRu::Cpp::lib_target {
    target 'b'
    cpp_source 'b.cc'
)
require 'mxx_ru/cpp'
MxxRu::Cpp::exe_target {
    target 'main'
    cpp_source 'main.cc'
    required_prj 'b/b.rb'
)

У Mxx_ru, конечно же, синтаксический оверхед побольше. Ну так он и постарше будет, лет на 10. Да и используется в Mxx_ru не специализированный, заточенный под задачу язык, а язык программирования Ruby. Но отрадно, что хотя бы Google движется в верном направлении. И, может быть, у CMake таки появится достойная альтернатива.

Комментариев нет: