使用Bazel编译带有gflags支持的glog失败

时间:2017-07-09 22:32:26

标签: bazel glog gflags

当我尝试使用Bazel使用gflags支持编译glog时,我遇到了失败。再现此问题并显示编译错误消息的github repo在此处:https://github.com/dionescu/bazeltrunk.git

我怀疑发生问题是因为glog正在查找和使用" config.h"文件由gflags发布。但是,我不明白为什么会发生这种情况以及构建文件的当前结构导致此类错误的原因。我找到的一个解决方案是为gflags提供我自己的BUILD文件,其中配置是一个单独的依赖项(在我的例子中glog是如何做的)。

对于理解本例中的问题,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题是gflag的BUILD文件包含自己的配置。将public class NurTests { public static void main(String[] args) { int [] arr = new int[100]; int value = 1; for(int i = 0; i < arr.length; i++){ arr[i] = value; value ++; } } } 添加到glog.BUILD&#39; public class NurTests { public static void main(String[] args) { int [] arr = new int[100]; for(int i = 0; i < arr.length; i++){ arr[i] = i + 1; } } } 会产生:

-H

如果你看一下gflag的config.h,它会采用一种非常有用的方法来评论大部分配置:

copts

所以没有定义。

选项:

最简单的方法可能是在你的glog.BUILD中生成config.h:

. external/glog_archive/src/utilities.h
.. external/glog_archive/src/base/mutex.h
... bazel-out/local-fastbuild/genfiles/external/com_github_gflags_gflags/config.h
In file included from external/glog_archive/src/utilities.h:73:0,
                 from external/glog_archive/src/utilities.cc:32:
external/glog_archive/src/base/mutex.h:147:3: error: #error Need to implement mutex.h for your architecture, or #define NO_THREADS
 # error Need to implement mutex.h for your architecture, or #define NO_THREADS
   ^

这会将.h文件放在比gflags版本更高优先级的位置。

或者,如果你想使用// --------------------------------------------------------------------------- // System checks // Define if you build this library for a MS Windows OS. //cmakedefine OS_WINDOWS // Define if you have the <stdint.h> header file. //cmakedefine HAVE_STDINT_H // Define if you have the <sys/types.h> header file. //cmakedefine HAVE_SYS_TYPES_H ... genrule( name = "config", outs = ["config.h"], cmd = "cd external/glog_archive; ./configure; cd ../..; cp external/glog_archive/src/config.h $@", srcs = glob(["**"]), ) # Then add the generated config to your glog target. cc_library( name = "glog", srcs = [...], hdrs = [ ":config.h", ... 是你项目存储库的简写),你可以在genrule中做这样的事情:

//third_party/glog/config.h

您还必须将@//添加到genrule( name = "config", outs = ["config.h"], cmd = "cp $(location @//third_party/glog:config.h) $@", srcs = ["@//third_party/glog:config.h"], ) 文件中。