使用 CMake 处理额外的 CMake 文件

Processing additional CMake files with CMake

我有 CMakeLists.txt 文件,该文件受源代码管理。然而,为了交叉编译,我需要做很多调整,这样所有选项如 -DCMAKE_SYSTEM_PROCESSOR=armhf 等都不符合命令行限制。为了解决这个问题,我只是将所有选项添加到根目录中的 CMakeLists.txt 文件中。他们看起来像

if(TWEAK_PROJECT_XXX)
    set(CMAKE_SYSTEM_PROCESSOR armhf CACHE STRING "")
...
endif()

当然我不能将这些调整提交给源代码管理。但是,命令行 SVN 在制作补丁时不允许排除某些文件,例如:

svn diff --diff-cmd=diff -x -U999999 > full.diff

而且我需要完整的 diff,所以我不能使用 TortoiseSVN GUI 来制作它(在 GUI 中没有这种可能性,AFAIK)。所以我每次都必须手动修改差异以排除 CMakeLists.txt 的调整。这很不方便。

作为一个解决方案,我正在考虑将这些调整移动到一个单独的文件,而不是在源代码控制下(并在 SVN 中忽略它),并将一些命令行选项传递给 CMake 以首先处理该文件。这可能吗?怎么样?

CMake 提供加载带有变量及其值的文件,以将其用作缓存的基础。
使用这样的缓存文件并通过

加载它
cmake -C <cachefile>

文档:cmake.org/cmake/help/v3.6/manual/cmake.1.html

同样,您可以使用 load_cache,但它不适合您的具体情况。