是否可以在 cmake 中扩展 `include(foo.cmake)` 的内容?

Is it possible to expand `include(foo.cmake)`'s content in cmake?

我想获得用相应内容替换每个 include(foo.cmake) 的“扩展 CMakeLists.txt”。不知道可不可以。

例如,我有 CMakeLists.txt 内容:

cmake_minimum_required(VERSION 3.20)
project(hello)
include(hello.cmake)
message(STATUS "***** hello_str is ${hello_str}")

hello.cmake 内容:

set(hello_str "Hello, World")

我会得到一个扩展的 CMakeLists.txt 内容(是的,就像 C/C++ 的预处理)

cmake_minimum_required(VERSION 3.20)
project(hello)
set(hello_str "Hello, World") ##!!
message(STATUS "***** hello_str is ${hello_str}")

这可能吗?又如何?


好吧,由于评论里的人实在是看不懂,我得把讲清楚

在交叉编译阶段,常用的用法是:

mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=qnx-aarch64.toolchain.cmake
cmake --build .

但实际上 qnx-aarch64.toolchain.cmake 包含一行:

include(linux-aarch64.toolchain.cmake)

因此,人们必须同时拥有 qnx-aarch64.toolchain.cmakelinux-aarch64.toolchain.cmake,而不是只有一个 qnx-aarch64.toolchain.cmake 文件。

我期望的是只有一个qnx-aarch64.toolchain.cmake文件就可以完成交叉编译。

@fabian 你不明白我的问题,一直在讲非常简单的东西,还以为我不知道这些东西。

Is that possible?

没有。 CMake 3.22(撰写本文时的当前版本)及以下版本不提供此功能。