CLion构建Tensorflow源码工程

环境配置

使用2018.3版本的Clion及其Bazel插件, 更新版本的Bazel插件官宣不再支持Clion, 实测无法生成bazel文件。此外,bazel的版本也需要注意一下,目前Bazel迭代频繁且向后兼容性很差,由此导致了Tensorflow源码的版本和Bazel版本的强耦合,以及Bazel插件和Bazel版本的强耦合并间接和Tensorflow源码版本耦合在一起。
笔者使用的是Tensorflow 1.14的代码,对应bazel 0.24.1,bazel插件支持0.23.0以上bazel,二者不冲突。但如果使用TF 1.13版本,要求bazel 0.21.0,就和bazel插件支持的bazel版本有冲突,导致报错:

那如何解决这个问题呢?毕竟IDE可以不更新,源码总不能一直维持1.14吧,毕竟2.0已经在如火如荼的迭代中了。
我们知道:
1. 构建工程生成的.clwb目录如果不进行(也不该进行) git add,就会一直留在源码目录中,不会随着分支切换被清空。
2. 工程构建完毕之后,相关的文件也是以符号链接的形式添加到源码目录,而符号链接默认也不会随着工程分支的切换发生变化。
3. 切换分支会引起Clion更新符号索引,但不会完全重建工程。
由此,就有个取巧的办法:先使用TF1.14构建源码工程,再用git切换到其他版本更新索引,亲测有效。

构建工程

1.Import bazel project, .clwb里会存相应的符号信息. 此时可以通过编辑以下文件控制实际生成的目标, 此外, 还可以在Bazel build的过程中open project view来控制. 笔者这边希望生成全部符号的关系, 所以使用了默认的”all”

2. 工程目录下执行 ./configure 配置, 生成的.bazelrc文件用来保证bazel命令顺利执行

3. Bazel->Build->Compile Project, 执行编译, 编译时为了获得符号关系, 会把所有Target都编译一遍, 生成符号间关系, 即便环境不允许, 部分失败也没关系。这个过程耗时约1~2h,期间会大量从外网拉包,所以,嗯,要科学。

4. Bazel->Sync->Sync Project with Build Files, 将符号关系保存到数据库.

2 comments on “CLion构建Tensorflow源码工程

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.