I have two separate git projects that I build using cmake
.
Project_A
|CMakeLists_A.txt
|foo.H
In the CMakeLists_A.txt
file, I define a variable that points to foo.H
as follows:
set(var_projectA ${CMAKE_CURRENT_SOURCE_DIR}/foo.H)
I add Project A as a subdirectory in Project B, which has the following structure:
Project B
|CMakeLists_B.txt
|Subdirectory_B
|CMakeLists_subB.txt
|test.cpp
In CMakeLists_B.txt
, I have:
add_subdirectory(${CMAKE_SOURCE_DIR}/extern/Project_A)
How can I access the variable var_projectA
in the subdirectory of Project B (i.e., in CMakeLists_subB.txt
)?
Variables in CMake are directory, function, and block scoped. add_subdirectory
creates a new directory "child scope". You can set a variable in the parent scope of a given scope by using the PARENT_SCOPE
argument of the set
command.
Note that if you want a variable to be set at a given scope and the parent scope, you need to call set
twice- once to set it at that scope, and once to set it at its parent scope.
If a parent directory scope isn't guaranteed to exist, you can check that CMAKE_SOURCE_DIR
is not equal to the CMAKE_CURRENT_SOURCE_DIR
, like so:
if(NOT ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}"))
set(foo "hello world!" PARENT_SCOPE)
endif()