如何使用Clion或Netbeans正确导入Tensorflow源代码

时间:2017-05-01 21:51:24

标签: c++ vim netbeans tensorflow clion

我打算阅读Tensorflow(TF)源代码的核心模块

我的问题是我没有在IDE中读取TF等C / C ++源代码的经验。任何人都可以给我一些关于如何在IDE中有效读取TF源代码(核心模块)的说明。我的Macbook上有 Clion和Netbeans ,但我不知道如何正确导入TF(还要导入哪个部分?;如何构建它?)这样当我想知道声明一个C ++类我可以直接跳转到它的签名/声明。

我将非常感谢有效阅读TF源代码的任何建议/推荐工具。顺便说一句,我假设用IDE读取TF代码是有效的。如果不是这样,我可以停止使用它们并转向像VIM这样的工具。

2 个答案:

答案 0 :(得分:2)

原始Tensorflow存储库(GitHub)不包含任何特定IDE的项目信息文件,这意味着您不能只导入整个项目,除非您使用的东西可以根据项目文件夹导入文件({ {3}},AtomVisual Studio Code等等。如果您的目标只是阅读代码库中的导航,我建议您使用其中之一。

不幸的是,您无法使用任何这些编辑器构建代码。 Tensorflow使用Sublime作为其构建工具,目前支持Eclipse和Xcode。老实说,我不确定你是否可以在其中一个IDE中导入代码库。

答案 1 :(得分:0)

我解决了这个问题:

  1. 在TF存储库中创建CMakeLists.txt文件。 ls -la输出应如下所示:
tensorflow
third-party
tools
CMakeLists.txt
some
other
files
  1. CMakeLists.txt应该如下所示:

注意!!!这不是完整的文件,因为完整的文件应超过800行。这只是您了解此想法的一个示例。您可以在此处获取完整文件:

https://github.com/oleg-ostanin/tf_related_staff/blob/master/CMakeLists.txt

但是下周它可能会过时了,所以甚至不用理会。

cmake_minimum_required(VERSION 3.14)
project(tensorflow)

set(CMAKE_CXX_STANDARD 14)

# git clone https://github.com/abseil/abseil-cpp.git
include_directories(/home/oostanin/tf_related_repos/abseil-cpp)

# git clone https://github.com/protocolbuffers/protobuf.git
include_directories(/home/oostanin/tf_related_repos/protobuf/src/)

include_directories(/home/oostanin/tensorflow)

# you can get this directory only by building TF from sources using Bazel
include_directories(/home/oostanin/tensorflow/bazel-genfiles)

file(GLOB tensorflow_contrib_tensorrt_shape_fn "${CMAKE_SOURCE_DIR}/tensorflow/contrib/tensorrt/shape_fn/*.cc")
file(GLOB tensorflow_compiler_xla_service_llvm_ir "${CMAKE_SOURCE_DIR}/tensorflow/compiler/xla/service/llvm_ir/*.cc")
file(GLOB tensorflow_lite_delegates_gpu_gl "${CMAKE_SOURCE_DIR}/tensorflow/lite/delegates/gpu/gl/*.cc")
# here should be much more lines

add_library(
        tensorflow

        SHARED

        ${tensorflow_contrib_tensorrt_shape_fn}
        ${tensorflow_compiler_xla_service_llvm_ir}
        ${tensorflow_lite_delegates_gpu_gl}
        # here should be much more lines too
                )

target_link_libraries(
        tensorflow
        )

一些解释:

TF源文件依赖于许多其他项目,因此您将需要克隆这些项目并将其放置在附近,并告诉您的Cmake在哪里找到它们。这是这两行的内容:

# git clone https://github.com/abseil/abseil-cpp.git
include_directories(/home/oostanin/tf_related_repos/abseil-cpp)

# git clone https://github.com/protocolbuffers/protobuf.git
include_directories(/home/oostanin/tf_related_repos/protobuf/src/)

大约有2个以上的存储库,但这会让您入门。

TF源文件依赖于已编译的protobuf标头,而我编译它们的最简单方法是使用Bazel从源代码构建TF。这是另一个痛苦的故事,但是我做到了,我相信你也可以做到。比您应该告诉您的Cmake在哪里可以找到那些已编译的protobuf标头。该行就是这样做的:

include_directories(/home/oostanin/tensorflow/bazel-genfiles)

如果您不能使用Bazel构建TF,只需跳过该部分,您将看到更多由于不满意的包含而导致的红色错误,但是您将能够阅读和浏览大多数代码。

您应该告诉Cmake在哪里可以找到TF源文件,而对我来说,最简单的方法是生成包含300行以上所有包含.cc文件的目录的列表,如下所示:

file(GLOB tensorflow_contrib_tensorrt_shape_fn "${CMAKE_SOURCE_DIR}/tensorflow/contrib/tensorrt/shape_fn/*.cc")
file(GLOB tensorflow_compiler_xla_service_llvm_ir "${CMAKE_SOURCE_DIR}/tensorflow/compiler/xla/service/llvm_ir/*.cc")
file(GLOB tensorflow_lite_delegates_gpu_gl "${CMAKE_SOURCE_DIR}/tensorflow/lite/delegates/gpu/gl/*.cc")
# here should be much more lines

,然后生成另外300多行的长列表,以将其作为如下来源:

add_library(
        tensorflow

        SHARED

        ${tensorflow_contrib_tensorrt_shape_fn}
        ${tensorflow_compiler_xla_service_llvm_ir}
        ${tensorflow_lite_delegates_gpu_gl}
        # here should be much more lines too
                )

您无法使用该CMakeLists.txt构建TF,甚至不用考虑它。但是,与使用VIM相比,它可以使您将TF源代码导入CLion,并且阅读,浏览和编辑更加容易。