Home > OS >  How to make QtCreator CMake build depend on another CMake project?
How to make QtCreator CMake build depend on another CMake project?

Time:01-31

I have a CMake project that produces a static library. It compiles fine in QtCreator and produces the library in build dir. The CMakeLists.txt for the static library looks like this:

cmake_minimum_required(VERSION 3.5)

project(mystaticlib VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

file(GLOB mystaticlib_SRC "src/**.cpp")
add_library( mystaticlib STATIC
    ${mystaticlib_SRC}
)
target_include_directories( mystaticlib PRIVATE include/mystaticlib INTERFACE include )

Now I have a Qt application project and I'd like to make it so that it depends on the other one - meaning I can do something like in the QtProject:

cmake_minimum_required(VERSION 3.25)

project(MyQtProject VERSION 0.1 LANGUAGES CXX)

# This is how I imagine it working, not an actual code
include_project(mystaticlib, "~/my_projects/mystaticlib/CMakeLists.txt")
set(HEADERS_mystaticlib get_project_headers(mystaticlib))
# end of made up code
add_executable(MyQtProjectEXE ${PROJECT_SOURCES})
target_link_libraries(MyQtProjectEXE mystaticlib)
target_include_directories(MyQtProjectEXE HEADERS_mystaticlib)

How can I get something like that? In practice, I'd like it to work so that the dependent project directory can be set to whatever during cmake configure step.

CodePudding user response:

You are most likely interested in add_subdirectory.

If the containing subdirectory has a CMakeLists.txt then by:

add_subdirectory("./path/to/the/directory")

You will include all targets defined in that CMakeLists.txt file.

All you have to do is add a dependency by using target_link_libraries. CMake will then understand that the subdirectory needs to be build beforehand.


EDIT: To use your project as an example:

cmake_minimum_required(VERSION 3.25)

project(MyQtProject VERSION 0.1 LANGUAGES CXX)

# This is how I imagine it working, not an actual code


#if the path is a subdirectory within the current folder
add_subdirectory("./local_path/to/mystaticlib")
#if not you need to specify a binary dir
add_subdirectory("/absolute/path/to/mystaticlib" "${CMAKE_CURRENT_BINARY_DIR}/mystaticlib")


set(HEADERS_mystaticlib get_project_headers(mystaticlib))
# end of made up code
add_executable(MyQtProjectEXE ${PROJECT_SOURCES})
target_link_libraries(MyQtProjectEXE mystaticlib)
target_include_directories(MyQtProjectEXE HEADERS_mystaticlib)
  • Related