使用CMake和Xcode:修改CMakeLists.txt时保持项目更改

时间:2010-07-16 10:45:12

标签: xcode cmake

首先,我从未使用Xcode开发过。我有一个项目是由我在特定环境(Linux和emacs)下开发的,现在一些使用不同环境的同事将与我合作。这是一个使用CMake的C ++项目。

长话短说:

  • 我使用Linux / emacs。其他开发人员使用mac / Xcode。
  • 我使用GNU Makefiles生成器。他们使用Xcode生成器。
  • 一切似乎都运转正常。

问题

Xcode开发人员将使用 Group&的可执行文件列表中显示的可执行文件。 Xcode的文件窗口。他们将通过双击并添加他们的调整来配置它(配置调试目录,设置环境变量,但更重要的是,设置可执行文件的参数)。

当开发人员(我)更改CMakeLists.txt(即添加新的源文件)时,XCode开发人员被迫重新生成他们的项目,他们丢失所有配置如上所述。

问题:有没有办法避免这种情况?

如果每个Xcode开发人员不断丢失该配置,我肯定会是唯一使用CMake的人。 :(

感谢您的帮助!

3 个答案:

答案 0 :(得分:11)

我想你会失去这一个。 Xcode将所有项目定义存储在名为Foo.xcodeproj / project.pbxproj的文件中。当您的某个Mac开发人员更改标志或设置时,它会记录在project.pbxproj文件中。当您更改CMakeLists.txt文件时,CMake会触发project.pbxproj的重建,从而消除所有Mac开发人员的更改。 Xcode的设计并没有考虑到CMake,它们只能很好地协同工作。

一种可能的解决方案(对Mac开发人员来说不是最好的)是使用CMake生成makefile。他们需要在Xcode中编写一些自定义命令,调用CMake / Make来构建可执行文件,但是他们可以将参数传递给CMake来控制构建过程。可执行文件将分别定义为Xcode,而CMake只会清除Makefile。这可能是让每个人都开心的方式。

CMake人员没有给予Xcode应有的关注,恕我直言。但这种限制是Xcode架构中固有的,并且将是一个棘手的问题。

希望这有帮助,
-Dan

编辑:

您的Xcode开发人员使用“用户定义的设置”的能力有限。我不知道如何使用这些(我是一个emacs / make-kind的家伙),但也许他们可以使用这些来覆盖CMake的设置。

答案 1 :(得分:10)

您可以添加按add_custom_target(foobar COMMAND foo --bar DEPENDS foo)运行程序的目标。您也可以调用脚本而不是程序,在那里很容易设置环境变量(我在Win32下使用此设置来调整VC中的路径)。此脚本也可以是VCS中的模板,因此每个开发人员都拥有自己的脚本版本以及实际的命令行参数。

答案 2 :(得分:0)

<块引用>

Xcode 开发人员将使用出现在 Xcode 的 Group & Files 窗口的 Executables 列表下的可执行文件。他们将通过双击来配置它并添加他们的调整(配置调试目录,设置环境变量,但更重要的是,设置可执行文件的参数)。

对于 Cmake 的最新版本,Xcode 的方案设置中的许多设置都可以在 Cmake 中进行外部设置,而无需通过 Xcode 导航:

XCODE_SCHEME_ARGUMENTS
XCODE_SCHEME_DEBUG_AS_ROOT
XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
XCODE_SCHEME_ENVIRONMENT
XCODE_SCHEME_EXECUTABLE
XCODE_SCHEME_WORKING_DIRECTORY

要为所有目标设置某些内容,请将 CMAKE_ 前置到上面的变量中,它将成为全局变量。

必须将 CMAKE_XCODE_GENERATE_SCHEME 设置为 true 才能使上述变量生效。

https://cmake.org/cmake/help/latest/prop_tgt/XCODE_GENERATE_SCHEME.html#prop_tgt:XCODE_GENERATE_SCHEME