使用 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
,但它不适合您的具体情况。
我有 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
,但它不适合您的具体情况。