2017-02-20 100 views
1

我喜欢使用配置文件来设置多个缓存变量。目的是为了在机器上运行的每个项目重用它,或者为测试或特殊用途选择不同的库版本。如何为CMake项目加载用户特定配置

我可以用CMake的实现它的文件像这样的:

set(path_to_lib_one path/to/lib/one) 
set(option1 dont_want_to_bother_setting_this_option) 
set(option2 that_option_have_to_be_set_again) 

并调用include(myConfigfile)

但我想知道他们是否是一种缓存式的做法,以及管理用户/设置特定配置的最佳做法是什么。

回答

1

使用CMake提供的初始缓存选项。您存储在正确格式的选项(set with CACHE`)和呼叫

cmake -C <cacheFile> <pathToSourceDir> 

自给例如

CMakeLists.txt看起来像

,并要预先设置三个变量。该cacheFile.txt看起来像

set(path_to_lib_one path/to/lib/one CACHE FILEPATH "some path") 
set(option1 "dont_want_to_bother_setting_this_option" CACHE STRING "some option 1") 
set(option2 42 CACHE INT "and an integer") 

和您的CMake的调用(从源目录下的目录build

cmake -C cacheFile.txt .. 

输出是

loading initial cache file ../cacheFile.txt 
[..] 
path/to/lib/one/dont_want_to_bother_setting_this_option/42 

文档: https://cmake.org/cmake/help/latest/manual/cmake.1.html#options

载入前ternal缓存文件

此外,CMake提供了一种方法来读取由另一个项目创建的缓存文件。该命令是load_cache。您可以使用它来从外部缓存加载变量或将它们复制到当前项目的缓存中。

文档:https://cmake.org/cmake/help/latest/command/load_cache.html

+0

从你所指出的DOC:>指定的文件应包含使用该缓存选项,而不是一个高速缓存格式文件SET命令的CMake的脚本。 – jvtrudel

+0

奇怪的错误... CMake错误:源目录“D:/1-build-dev/qt-python-cmake/CMakeCache2.txt”是一个文件,而不是一个目录。 – jvtrudel

+0

即使我用''''SET(...)''''...... – jvtrudel

相关问题