Avoid overriding CMake default install prefix
CMake FetchContent is useful to incorporate subprojects at configure time. FetchContent subproject cache variables can override the top-level project cache, which can be confusing.
Projects may wish to use a default install prefix when “cmake –install-prefix” is not specified. Usually we use PROJECT_BINARY_DIR instead of CMAKE_BINARY_DIR, but in this case CMAKE_BINARY_DIR is a better choice to set the default install directory.
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# will not take effect without FORCE
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE PATH "Install top-level directory" FORCE)
endif()
Another possibility is using CMakePresets.json to set the default install directory:
{
"version": 3,
"configurePresets": [
{
"name": "default",
"binaryDir": "${sourceDir}/build",
"installDir": "${sourceDir}/build"
}
]
}