Discussion:
[CMake] include a file from the toolchain file
Federico Kircheis
2018-11-01 16:25:08 UTC
Permalink
As described on https://github.com/Kitware/CMake/ I'm writing here to
check if the current behavior of cmake is really a bug.

I'm having following issues with toolchains files.

Here is my use case:
I have a `toolchain.gcc.cmake` and a `toolchain.clang.cmake` toolchain
files.
Those files define variables for the gcc and clang compiler, and some
settings (location of libraries, version numbers and so on) are common
to both, and I would like to have a common `toolchain.cmake` toolchain
file for that.

If I write (uncomment on of the includes)

-----
# toolchain.gcc.cmake

#include(common_settings.cmake)
#include(./common_settings.cmake)
#include(${CMAKE_CURRENT_SOURCE_DIR}/common_settings.cmake)
#include(${CMAKE_SOURCE_DIR}/common_settings.cmake)
#include(${CMAKE_HOME_DIRECTORY}/common_settings.cmake)

set(CMAKE_C_COMPILER gcc)
----

and execute (an empty CMakeLists.txt in the current directory is sufficient)

----
rm -rf build; mkdir build && (cd build && cmake
-DCMAKE_TOOLCHAIN_FILE=../toolchain.gcc.cmake ..);
----

then cmake complains:
----
include could not find load file:


/home/user/Workspace/toolchain/build/CMakeFiles/CMakeTmp/common_settings.cmake
Call Stack (most recent call first):

/home/user/Workspace/toolchain/build/CMakeFiles/3.12.3/CMakeSystem.cmake:6
(include)

/home/user/Workspace/toolchain/build/CMakeFiles/CMakeTmp/CMakeLists.txt:2
(project)


CMake Error at /usr/share/cmake-3.12/Modules/CMakeTestCCompiler.cmake:37
(try_compile):
Failed to configure test project build system.
Call Stack (most recent call first):
CMakeLists.txt:3 (project)
----

As far as I've understood, cmake runs some internal test where, for
example, `CMAKE_CURRENT_SOURCE_DIR` would not be the source directory of
my code, and therefore
`include(${CMAKE_CURRENT_SOURCE_DIR}/common_settings.cmake)` obviously
fails.
Same holds for other variables.


The problem is that there is no way to set a path relative to the
toolchain file, at least I was not able to find any.

The only possible fix is setting an absolute path, but this is not
really a solution since it makes the toolchain not portable.

Is there anything else I could try?
Is there already an open issue? I was not able to find any on
https://gitlab.kitware.com/cmake/cmake/issues/.

Thank you in advance

Federico
--
Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Craig Scott
2018-11-01 20:22:11 UTC
Permalink
On Fri, Nov 2, 2018 at 3:25 AM Federico Kircheis <
Post by Federico Kircheis
As described on https://github.com/Kitware/CMake/ I'm writing here to
check if the current behavior of cmake is really a bug.
I'm having following issues with toolchains files.
I have a `toolchain.gcc.cmake` and a `toolchain.clang.cmake` toolchain
files.
Those files define variables for the gcc and clang compiler, and some
settings (location of libraries, version numbers and so on) are common
to both, and I would like to have a common `toolchain.cmake` toolchain
file for that.
If I write (uncomment on of the includes)
-----
# toolchain.gcc.cmake
#include(common_settings.cmake)
#include(./common_settings.cmake)
#include(${CMAKE_CURRENT_SOURCE_DIR}/common_settings.cmake)
#include(${CMAKE_SOURCE_DIR}/common_settings.cmake)
#include(${CMAKE_HOME_DIRECTORY}/common_settings.cmake)
set(CMAKE_C_COMPILER gcc)
----
and execute (an empty CMakeLists.txt in the current directory is sufficient)
----
rm -rf build; mkdir build && (cd build && cmake
-DCMAKE_TOOLCHAIN_FILE=../toolchain.gcc.cmake ..);
----
----
/home/user/Workspace/toolchain/build/CMakeFiles/CMakeTmp/common_settings.cmake
/home/user/Workspace/toolchain/build/CMakeFiles/3.12.3/CMakeSystem.cmake:6
(include)
/home/user/Workspace/toolchain/build/CMakeFiles/CMakeTmp/CMakeLists.txt:2
(project)
CMake Error at /usr/share/cmake-3.12/Modules/CMakeTestCCompiler.cmake:37
Failed to configure test project build system.
CMakeLists.txt:3 (project)
----
As far as I've understood, cmake runs some internal test where, for
example, `CMAKE_CURRENT_SOURCE_DIR` would not be the source directory of
my code, and therefore
`include(${CMAKE_CURRENT_SOURCE_DIR}/common_settings.cmake)` obviously
fails.
Same holds for other variables.
The problem is that there is no way to set a path relative to the
toolchain file, at least I was not able to find any.
The only possible fix is setting an absolute path, but this is not
really a solution since it makes the toolchain not portable.
Is there anything else I could try?
Is there already an open issue? I was not able to find any on
https://gitlab.kitware.com/cmake/cmake/issues/.
You should be able to use CMAKE_CURRENT_LIST_DIR to specify a location
relative to the toolchain file itself.
--
Craig Scott
Melbourne, Australia
https://crascit.com

New book released: Professional CMake: A Practical Guide
<https://crascit.com/professional-cmake/>
Federico Kircheis
2018-11-02 07:48:21 UTC
Permalink
Post by Craig Scott
You should be able to use CMAKE_CURRENT_LIST_DIR to specify a location
relative to the toolchain file itself.
Thank you, it worked without an hiccup
--
Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Loading...