C++ CMake~管理项目|同步更新

C++ CMake~管理项目|同步更新,c++,cmake,project-management,cmake-gui,C++,Cmake,Project Management,Cmake Gui,我一直在研究CMake有一段时间了,我真的很喜欢这样的想法,即在不混乱多个IDE的项目文件的情况下编写代码。只有一件事我不明白: 您有一个带有CMake文件的项目,每个开发人员都会从中为自己喜欢的IDE生成自己的项目。但是,如何将这些内容很好地重新合并到general(CMake)项目文件夹中呢?或者您是否需要每次再次手动同步更改的文件,方法是再次将其复制到常规项目文件夹中 我希望你们能帮我解决这个问题 生成的项目文件是构建工件,就像对象文件一样。它们不可移植到其他系统,也不应手动修改或签入版本

我一直在研究CMake有一段时间了,我真的很喜欢这样的想法,即在不混乱多个IDE的项目文件的情况下编写代码。只有一件事我不明白:

您有一个带有CMake文件的项目,每个开发人员都会从中为自己喜欢的IDE生成自己的项目。但是,如何将这些内容很好地重新合并到general(CMake)项目文件夹中呢?或者您是否需要每次再次手动同步更改的文件,方法是再次将其复制到常规项目文件夹中


我希望你们能帮我解决这个问题

生成的项目文件是构建工件,就像对象文件一样。它们不可移植到其他系统,也不应手动修改或签入版本控制系统。相反,请检入
CMakeLists.txt
文件。请注意,这些生成的项目文件直接引用源文件,不仅可用于生成,还可用于编辑源文件

对项目的更改直接进行到
CMakeLists.txt
(例如添加新文件或链接到新库)。如果需要更改以支持特定的开发环境,那么您需要仔细地进行更改,并进行测试以确保没有破坏其他人环境上的构建。例如,
IF(WIN32)
IF(UNIX)
允许对系统类型使用基本条件。基于精确的构建工具、系统架构、库或其他文件的存在或不存在等,可能会有更多


强烈建议构建“源代码外”,这样构建工件(包括生成的项目文件)就不会触及源代码树。这可以保持源代码管理软件的整洁,并允许多个编译器从同一个源代码中进行多个生成。

生成的项目文件是生成工件,就像对象文件一样。它们不可移植到其他系统,也不应手动修改或签入版本控制系统。相反,请检入
CMakeLists.txt
文件。请注意,这些生成的项目文件直接引用源文件,不仅可用于生成,还可用于编辑源文件

对项目的更改直接进行到
CMakeLists.txt
(例如添加新文件或链接到新库)。如果需要更改以支持特定的开发环境,那么您需要仔细地进行更改,并进行测试以确保没有破坏其他人环境上的构建。例如,
IF(WIN32)
IF(UNIX)
允许对系统类型使用基本条件。基于精确的构建工具、系统架构、库或其他文件的存在或不存在等,可能会有更多


强烈建议构建“源代码外”,这样构建工件(包括生成的项目文件)就不会触及源代码树。这可以保持源代码管理软件的整洁,并允许多个编译器从同一个源代码中进行多个生成。

生成的项目文件是生成工件,就像对象文件一样。它们不可移植到其他系统,也不应手动修改或签入版本控制系统。@Peter和该评论可能是一个答案。澄清一下:您将
CMakeLists.txt
文件本身签入到您的版本控制系统中,而不是签入生成的IDE项目文件。这当然意味着每个开发人员都必须在自己的机器上运行CMake才能构建任何东西,但这就是重点。我总是在源代码之外构建,使用完全独立的源代码树和二叉树。这使生成的文件不受源代码管理。忘记提及了。项目文件是生成的文件,存在于生成树中。此外,由于我需要使用多个编译器进行构建,因此我有一个源代码树和多个二叉树,每个二叉树都有自己的环境,所有依赖项都是为该编译器32位或64位构建的。生成的项目文件是构建工件,就像对象文件一样。它们不可移植到其他系统,也不应手动修改或签入版本控制系统。@Peter和该评论可能是一个答案。澄清一下:您将
CMakeLists.txt
文件本身签入到您的版本控制系统中,而不是签入生成的IDE项目文件。这当然意味着每个开发人员都必须在自己的机器上运行CMake才能构建任何东西,但这就是重点。我总是在源代码之外构建,使用完全独立的源代码树和二叉树。这使生成的文件不受源代码管理。忘记提及了。项目文件是生成的文件,存在于生成树中。此外,由于我需要使用多个编译器进行构建,所以我有一个源代码树和几个二叉树,每个二叉树都有自己的环境,所有依赖项都是为该编译器32位或64位构建的。因此,当我说生成特定于平台/IDE的项目时,它们不应该再被修改,而只能用于构建最终版本时,我说的对吗lib/exe?因此:我不能在我最喜欢的IDE中工作,对吗?你可以在你最喜欢的IDE中工作:编写软件、使用索引函数、重构函数、构建、调试等。你不能调整项目,例如添加文件或更改编译器标记。思考一下:如果目标是消除对多个项目文件的维护,所有操作都不同,那么您必须从一个通用的cmake文件开始。一旦您开始修改生成的项目文件并希望它是永久的,那么与为不同的IDE拥有一堆不同的项目文件的原始状态有什么区别呢?事实上,cmake与许多IDE的构建功能直接相关,因此当您将CMakeLists.txt文件修改为时,例如,添加一个新的源文件,IDE构建将触发项目的重新生成