gpt4 book ai didi

mysql - 由于 cmake,从源代码构建 MySQL 会更改 Makefile

转载 作者:行者123 更新时间:2023-11-29 07:24:51 25 4
gpt4 key购买 nike

我正在与另一位研究人员一起进行 MySQL 优化,我们正在使用 git 进行版本控制。问题是我们每个人都必须在不同的机器上编译这些源代码并运行cmake在我们的机器上生成不同版本的makefile。如果我们考虑以下情况

1. A changes source
2. A runs cmake, builds the source, and test performance
3. B pulls the code change
4. B changes source, runs cmake and builds the source

在第4步之后,B将拥有不同版本的Makefile以及依赖于用户和用户路径的文件,例如cmake_install.cmake。

例如,某些文件具有以下差异。

# The program to use to edit the cache.
-CMAKE_EDIT_COMMAND = /usr/local/bin/ccmake
+CMAKE_EDIT_COMMAND = /usr/bin/ccmake

# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/dcslab/userA/mysql/mysql-5.6.21-original
+CMAKE_SOURCE_DIR = /home/dcslab/userB/mysql-5.6.21-original

# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/dcslab/userA/mysql/mysql-5.6.21-original
+CMAKE_BINARY_DIR = /home/dcslab/userB/mysql-5.6.21-original

这些都是由cmake命令生成的与用户相关的路径。解决此冲突的直接方法是在最初提交 Makefile 或 cmake 生成的任何文件后取消跟踪它们。我想知道是否有更好且合法的方法来使用 cmake 为多个用户管理项目。提前感谢您的帮助!

最佳答案

CMake 生成的文件依赖于机器,因此它们无法在除生成它们的机器之外的任何机器上运行。正因为如此,它们对其他人来说毫无用处,也没有必要在 git 中跟踪它们。有两种方法可以实现此目的:

  1. 调整 gitignore用于在提交时忽略由 CMake 生成的文件。此类文件的模式相对简单,可以通过谷歌搜索找到。这种方法的缺点是,由项目的 CMake 脚本(configure_fileadd_custom_command)生成的文件不会被自动忽略,并且需要在 gitignore 中明确表示>

  2. 执行源外构建,即不从源目录运行cmake。 CMake 仅在构建目录中生成附加文件,正确的项目的 CMake 脚本也应遵循此规则。因此 git repo 将是干净的,没有任何 gitignore 模式。

通常的做法是在源目录的 ./build 子目录中执行源外构建。在这种情况下,您可以将 /build/** 添加到 gitignore,一切都会正常。

关于mysql - 由于 cmake,从源代码构建 MySQL 会更改 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com