[Linux] How to use CMAKE_INSTALL_PREFIX
There are two ways to use this variable:
passing it as a command line argument just like Job mentioned:
cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..
assigning value to it in
SET(CMAKE_INSTALL_PREFIX < install_path >)
But do remember to place it BEFORE
PROJECT(< project_name>)command, otherwise it will not work!
I want to generate Makefile with install target, making installation to /usr instead of default /usr/local. Assuming that build directory is done in the source subdirectory, I execute:
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
Now I execute:
make make install
All files are still installed to usr/local. What is wrong?
Edit: There is no CMAKE_INSTALL_PREFIX in any of CMakeLists.txt project files. Before running cmake, I delete everything from the output directory. install directives in CMakeLists.txt look like:
install(TARGETS mylibrary DESTINATION lib)
cmake and make does not create the folder and copy files into it
When you want to change where files are installed (relative to
CMAKE_INSTALL_PREFIX), you use
DESTINATION keyword in
install() command call. To perform an installation, use need to run
make install, because running just
make will only build the project.
To alter locations where built binaries are placed (within building tree), you need to set LIBRARY_OUTPUT_DIRECTORY property on
RVO target. You can also set its default value with CMAKE_LIBRARY_OUTPUT_DIRECTORY.
What is cmake equivalent of 'configure --prefix=DIR && make all install '?
You can pass in any CMake variable on the command line, or edit cached variables using ccmake/cmake-gui. On the command line,
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr . && make all install
Would configure the project, build all targets and install to the /usr prefix. The type (PATH) is not strictly necessary, but would cause the Qt based cmake-gui to present the directory chooser dialog.
make DESTDIR=<installhere> install
See also this question which explains the subtle difference between DESTDIR and PREFIX.
This is intended for staged installs and to allow for storing programs in a different location from where they are run e.g. /etc/alternatives via symbolic links. However if your package is relocatable and doesn't need any hard coded (prefix) paths set via the configure stage you may be able to skip it. So instead of:
cmake -DCMAKE_INSTALL_PREFIX=/usr . && make all install
you would run:
cmake . && make DESTDIR=/usr all install
Note that as user7498341 points out this is not appropriate for cases where you really should be using PREFIX.