我正在与另一位研究人员一起进行 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 中跟踪它们。有两种方法可以实现此目的:
调整 gitignore用于在提交时忽略由 CMake 生成的文件。此类文件的模式相对简单,可以通过谷歌搜索找到。这种方法的缺点是,由项目的 CMake 脚本(
configure_file
、add_custom_command
)生成的文件不会被自动忽略,并且需要在gitignore
中明确表示>执行源外构建,即不从源目录运行
cmake
。 CMake 仅在构建目录中生成附加文件,正确的项目的 CMake 脚本也应遵循此规则。因此 git repo 将是干净的,没有任何 gitignore 模式。
通常的做法是在源目录的 ./build
子目录中执行源外构建。在这种情况下,您可以将 /build/**
添加到 gitignore
,一切都会正常。
关于mysql - 由于 cmake,从源代码构建 MySQL 会更改 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892043/