如何将变量从命令行传递到CMake Toolhain文件?

4

有没有办法在调用cmake时将变量传递给工具链文件?

例如,我有以下工具链文件:

message("FOO = ${FOO}")

我尝试了以下方法,但未能成功。在工具链文件中变量未被设置。
cmake <src-dir> -DCMAKE_TOOLCHAIN_FILE=<toolchain-file> -DFOO="bar" -B <build-dir>

我实际上想要实现的是将路径传递给工具链文件。但我不能修改主CMakeLists.txt文件。


你尝试过使用 cmake <src-dir> -DFOO="bar" -B <build-dir> 吗? - Thomas Sablik
@ThomasSablik 是的,同样的问题。 - sergej
你使用的是哪个版本的 CMake?-B 是什么意思?如何设置工具链文件的路径? - Thomas Sablik
1
相关问题(或相同问题):https://dev59.com/a14b5IYBdhLWcg3w3k2Y。请在您的命令行中显示工具链规范(`-DCMAKE_TOOLCHAIN_FILE=...`或类似)。 - Tsyvarev
@ThomasSablik 我正在Windows上使用cmake版本3.5.2。使用“-B”设置构建目录。我使用“-D”设置工具链文件的路径(在问题中忘记提到,抱歉)。 - sergej
1
参数-B并没有按照我的期望工作。它设置了源路径而不是构建路径。<src-dir>-DCMAKE_TOOLCHAIN_FILE=<toolchain-file>的顺序是错误的。请尝试使用我的答案中的命令cmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-file> <src-dir> -DFOO="bar" - Thomas Sablik
1个回答

7

您需要使用-DCMAKE_TOOLCHAIN_FILE设置工具链文件的路径。以下是适用于我的示例 (cmake3 版本 3.12.0):

ToolChain.cmake:

message("Toolchain file loaded with path: ${FOO}")

CMakeLists.txt 文件为空

cmake -DCMAKE_TOOLCHAIN_FILE=./ToolChain.cmake . -DFOO=/path

输出结果为:

Toolchain file loaded with path: /path
<src-path>-DCMAKE_TOOLCHAIN_FILE=./ToolChain.cmake的顺序很重要。
cmake . -DCMAKE_TOOLCHAIN_FILE=./ToolChain.cmake -DFOO=/path

无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接