首先,我从未使用Xcode开发过。我有一个项目是由我在特定环境(Linux和emacs)下开发的,现在一些使用不同环境的同事将与我合作。这是一个使用CMake的C ++项目。
长话短说:
问题
Xcode开发人员将使用 Group&的可执行文件列表中显示的可执行文件。 Xcode的文件窗口。他们将通过双击并添加他们的调整来配置它(配置调试目录,设置环境变量,但更重要的是,设置可执行文件的参数)。
当开发人员(我)更改CMakeLists.txt
(即添加新的源文件)时,XCode开发人员被迫重新生成他们的项目,他们丢失所有配置如上所述。
问题:有没有办法避免这种情况?
如果每个Xcode开发人员不断丢失该配置,我肯定会是唯一使用CMake的人。 :(
感谢您的帮助!
答案 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 才能使上述变量生效。