在 Windows 10 和 Visual Studio Community 2019 下将 boost 与 Bazel 结合使用
Using boost with Bazel under Windows 10 and Visual Studio Community 2019
我已经建立了一个简单的 C++ 程序,它使用了 boost 文件系统模块。为了构建程序,我使用 Bazel 0.25.0。我在 Windows 10 x64 下工作。
我安装了 Visual Studio 2019 Community Edition 并将 BAZEL_VC
设置为 E:\Program Files (x86)\Microsoft Visual Studio19\Community\VC
。我已经安装了 MSYS2 shell。
这是我的文件(也可以在 GitHub 上找到):
工作空间
workspace(name = "BoostFilesystemDemo")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
# Boost
git_repository(
name = "com_github_nelhage_rules_boost",
commit = "6681419da0163d097d4e09c0756c0d8b785d2aa8",
remote = "https://github.com/nelhage/rules_boost",
shallow_since = "1556401984 -0700"
)
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
main.cpp
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
构建
cc_binary(
name = "FilesystemTest",
srcs = ["main.cpp"],
deps = [
"@boost//:filesystem",
],
)
当我尝试构建时收到以下错误消息(不幸的是与一些德语混合 - Datei kann nicht gefunden werden
表示 file not found
)
PS E:\dev\BazelDemos\BoostFilesystemDemo> bazel build //...
INFO: Analyzed target //:FilesystemTest (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: E:/dev/bazeldemos/boostfilesystemdemo/BUILD:1:1: Linking of rule '//:FilesystemTest' failed (Exit 1104)
LINK : fatal error LNK1104: Datei "libboost_filesystem-vc141-mt-x64-1_68.lib" kann nicht ge÷ffnet werden.
Target //:FilesystemTest failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 1.175s, Critical Path: 0.12s
INFO: 0 processes.
FAILED: Build did NOT complete successfully
有没有人知道如何解决这个问题(使用 Bazel 0.25.0 或更高版本编译源代码,Visual Studio 2019 社区版,Windows 10 x64,目标应该是 x64)?使用 Ubuntu 18.04 一切正常。
切换到另一个提供提升的 git 存储库对我来说也很好。
我还想使用 boost 库的其他部分,例如 boost signals2、boost log、boost 算法和 boost 计算。
这样修改BUILD.boost
:
diff --git a/BUILD.boost b/BUILD.boost
index a3a2195..2cffdda 100644
--- a/BUILD.boost
+++ b/BUILD.boost
@@ -623,6 +623,14 @@ boost_library(
":system",
":type_traits",
],
+ defines = select({
+ ":linux_arm": [],
+ ":linux_x86_64": [],
+ ":osx_x86_64": [],
+ ":windows_x86_64": [
+ "BOOST_ALL_NO_LIB",
+ ],
+ }),
)
boost_library(
@@ -1491,6 +1499,14 @@ boost_library(
":predef",
":utility",
],
+ defines = select({
+ ":linux_arm": [],
+ ":linux_x86_64": [],
+ ":osx_x86_64": [],
+ ":windows_x86_64": [q
+ "BOOST_ALL_NO_LIB",
我克隆了 rules_boost 存储库并应用了上述更改 - 可以在 WORKSPACE 文件中直接使用克隆的存储库:
workspace(name = "BoostFilesystemDemo")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
# Boost
git_repository(
name = "com_github_nelhage_rules_boost",
commit = "f0d2a15d6dd5f0667cdaa6da9565ccf87b84c468",
remote = "https://github.com/Vertexwahn/rules_boost",
shallow_since = "1557766870 +0200"
)
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
目前,拉取请求是 运行 将这些更改合并到原始存储库中:https://github.com/nelhage/rules_boost/pull/123
我已经建立了一个简单的 C++ 程序,它使用了 boost 文件系统模块。为了构建程序,我使用 Bazel 0.25.0。我在 Windows 10 x64 下工作。
我安装了 Visual Studio 2019 Community Edition 并将 BAZEL_VC
设置为 E:\Program Files (x86)\Microsoft Visual Studio19\Community\VC
。我已经安装了 MSYS2 shell。
这是我的文件(也可以在 GitHub 上找到):
工作空间
workspace(name = "BoostFilesystemDemo")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
# Boost
git_repository(
name = "com_github_nelhage_rules_boost",
commit = "6681419da0163d097d4e09c0756c0d8b785d2aa8",
remote = "https://github.com/nelhage/rules_boost",
shallow_since = "1556401984 -0700"
)
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
main.cpp
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
构建
cc_binary(
name = "FilesystemTest",
srcs = ["main.cpp"],
deps = [
"@boost//:filesystem",
],
)
当我尝试构建时收到以下错误消息(不幸的是与一些德语混合 - Datei kann nicht gefunden werden
表示 file not found
)
PS E:\dev\BazelDemos\BoostFilesystemDemo> bazel build //...
INFO: Analyzed target //:FilesystemTest (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: E:/dev/bazeldemos/boostfilesystemdemo/BUILD:1:1: Linking of rule '//:FilesystemTest' failed (Exit 1104)
LINK : fatal error LNK1104: Datei "libboost_filesystem-vc141-mt-x64-1_68.lib" kann nicht ge÷ffnet werden.
Target //:FilesystemTest failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 1.175s, Critical Path: 0.12s
INFO: 0 processes.
FAILED: Build did NOT complete successfully
有没有人知道如何解决这个问题(使用 Bazel 0.25.0 或更高版本编译源代码,Visual Studio 2019 社区版,Windows 10 x64,目标应该是 x64)?使用 Ubuntu 18.04 一切正常。
切换到另一个提供提升的 git 存储库对我来说也很好。
我还想使用 boost 库的其他部分,例如 boost signals2、boost log、boost 算法和 boost 计算。
这样修改BUILD.boost
:
diff --git a/BUILD.boost b/BUILD.boost
index a3a2195..2cffdda 100644
--- a/BUILD.boost
+++ b/BUILD.boost
@@ -623,6 +623,14 @@ boost_library(
":system",
":type_traits",
],
+ defines = select({
+ ":linux_arm": [],
+ ":linux_x86_64": [],
+ ":osx_x86_64": [],
+ ":windows_x86_64": [
+ "BOOST_ALL_NO_LIB",
+ ],
+ }),
)
boost_library(
@@ -1491,6 +1499,14 @@ boost_library(
":predef",
":utility",
],
+ defines = select({
+ ":linux_arm": [],
+ ":linux_x86_64": [],
+ ":osx_x86_64": [],
+ ":windows_x86_64": [q
+ "BOOST_ALL_NO_LIB",
我克隆了 rules_boost 存储库并应用了上述更改 - 可以在 WORKSPACE 文件中直接使用克隆的存储库:
workspace(name = "BoostFilesystemDemo")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
# Boost
git_repository(
name = "com_github_nelhage_rules_boost",
commit = "f0d2a15d6dd5f0667cdaa6da9565ccf87b84c468",
remote = "https://github.com/Vertexwahn/rules_boost",
shallow_since = "1557766870 +0200"
)
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
目前,拉取请求是 运行 将这些更改合并到原始存储库中:https://github.com/nelhage/rules_boost/pull/123