0

I have two projects - the first one contains the second one as a subdirectory. in the second project I add the path to the my cmake modules in CMAKE_MODULE_PATH, and in the first project I add the second one using the add_subdirectory command. Then I try to include the module in the first project, but cmake saying me: CMake Error at tests/CMakeLists.txt:7 (include): include could not find requested file and the CMAKE_MODULE_PATH is empty. How I can save value of CMAKE_MODULE_PATH to then use in the first project?

that's my CMakeLists:

2nd project:

cmake_minimum_required(VERSION 3.23 FATAL_ERROR)

set(UTILS_PROJECT_NAME "utils")
set(UTILS_LIB_NAME "utils")

set(UTILS_VERSION_MAJOR 0)
set(UTILS_VERSION_MINOR 0)
set(UTILS_VERSION_PATCH 1)

set(UTILS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

if(${CMAKE_SOURCE_DIR} STREQUAL ${UTILS_SOURCE_DIR})
    set(UTILS_STANDALONE ON)
    message(STATUS "utils standalone")
endif()

option(UTILS_BUILD_DOCS "Build the utils documentation" OFF)
option(UTILS_BUILD_TESTS "Guild the utils tests and examples" ${UTILS_STANDALONE})

project(${UTILS_PROJECT_NAME} 
    VERSION ${UTILS_VERSION_MAJOR}.${UTILS_VERSION_MINOR}.${UTILS_VERSION_PATCH}
    LANGUAGES CXX
)

... 
setup library target
...

if(NOT "${UTILS_SOURCE_DIR}/cmake" IN_LIST CMAKE_MODULE_PATH)
    list(APPEND CMAKE_MODULE_PATH "${UTILS_SOURCE_DIR}/cmake")
endif()

if (${UTILS_BUILD_DOCS})
    add_subdirectory(docs)
endif()
if(${UTILS_BUILD_TESTS})
    add_subdirectory(tests)
endif()

1st project:

cmake_minimum_required(VERSION 3.23 FATAL_ERROR)

set(ENGINE_PROJECT_NAME "engine")
set(ENGINE_LIB_NAME "engine")

set(ENGINE_VERSION_MAJOR 0)
set(ENGINE_VERSION_MINOR 0)
set(ENGINE_VERSION_PATCH 1)

set(ENGINE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

if(${CMAKE_SOURCE_DIR} STREQUAL ${ENGINE_SOURCE_DIR})
    set(ENGINE_STANDALONE ON)
    message(STATUS "engine standalone")
endif()

option(ENGINE_BUILD_TESTS "Build the tests and examples" ${ENGINE_STANDALONE})

project(${ENGINE_PROJECT_NAME} 
    VERSION ${ENGINE_VERSION_MAJOR}.${ENGINE_VERSION_MINOR}.${ENGINE_VERSION_PATCH}
    LANGUAGES CXX
)

# bad way
list(APPEND CMAKE_MODULE_PATH "${ENGINE_SOURCE_DIR}/src/ext/utils/cmake")

add_subdirectory(src) # add_subdirectory(path/to/utils)

if(${ENGINE_BUILD_TESTS})
    add_subdirectory(tests) # use utils cmake modules (utils_add_tests)
endif()
Dmitry
  • 11
  • 2
  • Use `set` command with `PARENT_SCOPE` parameter for propagate the variable's value to outer directory. – Tsyvarev Jul 16 '22 at 17:36

1 Answers1

0

In first project, you can use set(CMAKE_MODULE_PATH "/path/to/the/second/project") to set CMAKE_MODULE_PATH, or else CMAKE_MODULE_PATH is empty by default. Could you show more cmakefile's details for positioning problem?

mariolu
  • 624
  • 8
  • 17