Keywords: CMake | Installation Prefix | Build System
Abstract: This article provides a comprehensive guide on specifying custom installation directories in CMake build system through the CMAKE_INSTALL_PREFIX variable. Starting from basic command-line usage, it progressively covers best practices including external build directories and cross-platform compatible commands. By comparing with traditional Autotools' configure --prefix command, it systematically explains CMake's equivalent implementation methods, offering complete code examples and configuration instructions to help developers master flexible project deployment strategies.
Fundamentals of CMake Installation Prefix Configuration
In traditional Autotools build systems, developers typically use configure --prefix=DIR && make all install command to specify installation directories. In CMake build system, equivalent functionality is achieved through the CMAKE_INSTALL_PREFIX variable. This variable controls the base directory path for project installation.
Basic Command Line Configuration Methods
The simplest configuration approach is to directly set the variable value in cmake command:
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr . && make all install
This command sequence first configures the project, sets the installation prefix to /usr, then compiles all targets and performs installation. The :PATH type declaration, while not mandatory, triggers directory selection dialogs in graphical tools like cmake-gui, providing better user experience.
Build System Best Practices
While the above method works, using external build directories is recommended in actual projects to maintain clean source trees:
mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. && cmake --build . --target install --config Release
Advantages of this approach include: avoiding source directory pollution, supporting parallel builds, and facilitating build artifact cleanup. The cmake --build command provides generator-agnostic build interface, while --config Release parameter is only used by multi-configuration generators (like Visual Studio) and safely ignored by others.
Deep Understanding of CMAKE_INSTALL_PREFIX
The CMAKE_INSTALL_PREFIX variable plays a crucial role in CMake projects. It not only affects the target location of make install, but also determines relative path resolution in CMake configuration files. When set to /usr, related binaries install to /usr/bin, libraries to /usr/lib, and header files to /usr/include.
Cross-Platform Compatibility Considerations
CMake's design considers cross-platform requirements. In Windows systems, path separators are automatically converted, and installation prefixes can include drive letters. For paths containing spaces, using quotes is recommended:
cmake -DCMAKE_INSTALL_PREFIX:PATH="C:\Program Files\MyApp" ..
This handling ensures consistent behavior across different operating systems.
Configuration Caching and Persistence
CMake caches configuration variables in CMakeCache.txt file. This means once CMAKE_INSTALL_PREFIX is set, subsequent build operations automatically use this value unless explicitly modified. To clear cache and reconfigure, delete the build directory or use rm CMakeCache.txt.
Graphical Tool Support
For developers preferring graphical interfaces, cmake-gui and ccmake provide interactive configuration methods. In these tools, CMAKE_INSTALL_PREFIX typically appears as editable fields supporting directory browsing. The :PATH type declaration activates directory selectors, simplifying path input process.
Advanced Application Scenarios
In complex projects, different installation prefixes might be needed based on build types. This can be achieved through conditional statements:
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_INSTALL_PREFIX "/opt/debug")
else()
set(CMAKE_INSTALL_PREFIX "/usr")
endif()
This flexibility allows CMake to adapt to various deployment needs, from development debugging to production environment releases.