是否可以在 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.cmake
和 linux-aarch64.toolchain.cmake
,而不是只有一个 qnx-aarch64.toolchain.cmake
文件。
我期望的是只有一个qnx-aarch64.toolchain.cmake
文件就可以完成交叉编译。
@fabian 你不明白我的问题,一直在讲非常简单的东西,还以为我不知道这些东西。
Is that possible?
没有。 CMake 3.22(撰写本文时的当前版本)及以下版本不提供此功能。
我想获得用相应内容替换每个 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.cmake
和 linux-aarch64.toolchain.cmake
,而不是只有一个 qnx-aarch64.toolchain.cmake
文件。
我期望的是只有一个qnx-aarch64.toolchain.cmake
文件就可以完成交叉编译。
@fabian 你不明白我的问题,一直在讲非常简单的东西,还以为我不知道这些东西。
Is that possible?
没有。 CMake 3.22(撰写本文时的当前版本)及以下版本不提供此功能。