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

标签 mysql git version-control makefile cmake

我正在与另一位研究人员一起进行 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/

相关文章:

PHP - 如何回显列中值的总和?

指示存储库已弃用的 Git 钩子(Hook)

java - 尝试在 Intellij 中创建运行/调试配置时在模块警告中找不到类

git - 删除 git 中的分支是否会将其从历史记录中删除?

git - 在单独的 Git 存储库中跨多个项目进行一致标记

mysql - 错误 : ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version

php - Javascript:如何从输入表格的内容中找到相似的短语或文本?

php - 将 UTF8 表上的 latin1 字符转换为 UTF8

linux - 如何将 "attach"工作目录到裸 GIT 存储库

version-control - 为什么 Visual SourceSafe 的浏览量这么差?