CMake:如何从工具链文件中获取项目的目录?

ata*_*xis 5 cmake

我有一个项目的结构如下

project:
-- CMakeLists.txt
-- toolchain.cmake
-- source
-- includes
-- tools
   -- arm-toolchain
      -- arm-gnueabihf-gcc
      -- ...
-- libraries
   -- lib1
      -- ...
      -- CMakeLists.txt
   -- lib2
      -- ...
      -- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

我想为另一个架构设置编译器,如下所示toolchain.cmake

...
set (CMAKE_C_COMPILER "${CMAKE_SOURCE_DIR}/tools/arm-toolchain/arm-gnueabihf-gcc")
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,在编译项目时变量${CMAKE_SOURCE_DIR}确实发生了变化,起初它是:

CMAKE_SOURCE_DIR=/home/username/project
Run Code Online (Sandbox Code Playgroud)

这正是我所期望的。不幸的是,它随后更改为

CMAKE_SOURCE_DIR=/home/username/project/build/CMakeFiles/CMakeTmp
Run Code Online (Sandbox Code Playgroud)

因此我不能用作${CMAKE_SOURCE_DIR}我的文件夹的根目录project,是否还有另一个不会改变的变量?或者,我可以以某种方式存储第一个值吗?问题是工具链被多次调用,因此我存储初始值的变量${CMAKE_SOURCE_DIR}在第二次运行时被覆盖。

ata*_*xis 4

我在这里找到了答案:https ://gitlab.kitware.com/cmake/cmake/issues/16744

CMAKE_CURRENT_LIST_DIR 在这种情况下确实有效。