我打算阅读Tensorflow(TF)源代码的核心模块
我的问题是我没有在IDE中读取TF等C / C ++源代码的经验。任何人都可以给我一些关于如何在IDE中有效读取TF源代码(核心模块)的说明。我的Macbook上有 Clion和Netbeans ,但我不知道如何正确导入TF(还要导入哪个部分?;如何构建它?)这样当我想知道声明一个C ++类我可以直接跳转到它的签名/声明。
我将非常感谢有效阅读TF源代码的任何建议/推荐工具。顺便说一句,我假设用IDE读取TF代码是有效的。如果不是这样,我可以停止使用它们并转向像VIM这样的工具。
答案 0 :(得分:2)
原始Tensorflow存储库(GitHub)不包含任何特定IDE的项目信息文件,这意味着您不能只导入整个项目,除非您使用的东西可以根据项目文件夹导入文件({ {3}},Atom,Visual Studio Code等等。如果您的目标只是阅读代码库中的导航,我建议您使用其中之一。
不幸的是,您无法使用任何这些编辑器构建代码。 Tensorflow使用Sublime作为其构建工具,目前支持Eclipse和Xcode。老实说,我不确定你是否可以在其中一个IDE中导入代码库。
答案 1 :(得分:0)
我解决了这个问题:
tensorflow
third-party
tools
CMakeLists.txt
some
other
files
注意!!!这不是完整的文件,因为完整的文件应超过800行。这只是您了解此想法的一个示例。您可以在此处获取完整文件:
https://github.com/oleg-ostanin/tf_related_staff/blob/master/CMakeLists.txt
但是下周它可能会过时了,所以甚至不用理会。 p>
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,并且阅读,浏览和编辑更加容易。