Базель, как создать простое приложение, которое связывает предварительно собранную внешнюю библиотеку - PullRequest
0 голосов
/ 06 марта 2020

Используя Bazel 2.2, как я могу построить против внешней библиотеки, например, в моем случае я хотел бы построить против boost (предварительно собранный для MS VC ++ 2019), вопрос в том, возможно ли это в Базель?

Учитывая, что локальный путь к библиотеке повышения - c: \ boost_1_72_0, в котором есть три папки bin, include и lib

Если так, как можно сказать компилятор и компоновщик:

  • путь к включаемым файлам
  • путь к файлам lib
  • повышение библиотеки, указывающей c .lib файлов для ссылки (т.е. boost_context-vc142- mt-x64-1_72.lib)

Я попробовал приведенный ниже cc_library, но, к сожалению, он не сработал.

cc_library(
    name = "boost",
    srcs = glob(["*.lib"]),
    hdrs = glob(["*.hpp", "*.*", "*"] + ["boost/*.hpp"] + ["boost/*/*.hpp"]),
    includes = [
        "C:/boost_1_72_0/include"
    ],
    linkopts = ["-pthread","-LC:/boost_1_72_0/lib"],
    visibility = ["//visibility:public"],
)

cc_binary(
    name = "hello-bazel",
    srcs = ["main.cpp", "SomeClass.h", "SomeClass.cpp"],
    deps = [":boost"],
)

1 Ответ

0 голосов
/ 16 марта 2020

Наконец я понял это. На самом деле он сильно отличается от CMake или любого другого инструмента сборки, если вы работаете с фоном CMake (как и я).

Прежде всего, я предполагаю, что у вас есть предварительно собранный внешний язык c / c ++ библиотека, т.е. C: \ boost со структурами папок include, bin и lib, также предположим, что у вас есть еще две важные вещи: папка

  • , в которой находится ваш основной файл WORKSPACE .
  • Файл BUILD , который относится к вашему основному приложению (пакету)

Основной файл сборки должен быть:

cc_binary(
    name = "hello-bazel",
    srcs = ["main.cpp", "SomeClass.h", "SomeClass.cpp"],
    deps = ["@boost//:boost_172_shared"],
)

Нам нужно чтобы добавить еще один файл сборки, давайте назовем его BUILD.boost в подпапке главной папки вашего приложения, то есть hello-bazel / dependency, чтобы он выглядел следующим образом:

hello-bazel -> папка-пример

  • WORKSPACE -> file
  • main -> папка, в которой находятся ваши BUILD , main. cpp, someclass.h и someclass. cpp
  • зависимость -> папка с хостами BUILD.boost

Добавьте BUILD.boost , как указано выше в зависимости подпапки, чтобы включить:

cc_library(
    name = "boost_172_shared",
    srcs = glob(["lib/*.lib"]),
    hdrs = glob( ["include/boost/*.hpp"] +    ["include/boost/*.h"] + 
                 ["include/boost/**/*.hpp"] + ["include/boost/**/*.h"] + 
                 ["include/boost/**/**/**/*.hpp"] + ["include/boost/**/**/**/*.h"] + 
                 ["include/boost/**/**/*.hpp"] +    ["include/boost/**/**/*.h"] ),
    strip_include_prefix = "include/",
    visibility = ["//visibility:public"]
)

Нам нужно отредактировать ваш файл WORKSPACE, как показано выше, чтобы включить следующее:

new_local_repository(
    name = "boost",
    path = "C:\\Development\\Libraries\\boost\\",
    build_file = "dependency\\BUILD.boost",
)

Вышеприведенное new_local_repository - это ключевая вещь, которая указывает на вашу внешнюю библиотеку, как упомянуто - Ондрей К. в комментариях.

...