[CMake] What are the best practices for project installation hierarchy?

Egor Tensin egor.tensin at gmail.com
Sat Jun 21 14:55:04 EDT 2014


So you suggest that I define "full" relative paths in each CMakeLists.txt? Like

install(TARGETS foo DESTINATION "bin/examples/lib1")

instead of

install(TARGETS foo DESTINATION "${INSTALL_PREFIX}/lib1")

That's an option to consider, of course...

On Sat, Jun 21, 2014 at 10:52 PM, J Decker <d3ck0r at gmail.com> wrote:
> Install has a DESTINATION option; which should be used rather than modifying
> what the install path is....
> well I guess depends on the method... install( targets ) has 3 destinations,
> LIBRARY_DESTINTION, RUNTIME_DESTINATION, (something)_DESTINATION for shared
> library output
>
>
> On Sat, Jun 21, 2014 at 11:14 AM, Egor Tensin <egor.tensin at gmail.com> wrote:
>>
>> Hello,
>>
>> I'm bothered with my approach to `install`ing CMake-enabled project
>> components. The whole source tree is separated into "libs" and
>> "examples" subdirectories, with a lot of libraries under the "libs"
>> subdirectory and library usage examples under the "examples"
>> subdirectory.
>>
>> For example:
>> .
>> ├── examples
>> │   ├── CMakeLists.txt
>> │   ├── lib1
>> │   │   ├── CMakeLists.txt
>> │   │   ├── example1.cpp
>> │   │   └── example2.cpp
>> │   └── lib2
>> │       ├── CMakeLists.txt
>> │       └── example1.cpp
>> └── libs
>>     ├── CMakeLists.txt
>>     ├── lib1
>>     └── lib2
>>
>> I would like to install the corresponding targets like this:
>>
>> .
>> ├── bin
>> │   └── examples
>> │       ├── lib1
>> │       │   ├── example1.exe
>> │       │   └── example2.exe
>> │       └── lib2
>> │           └── example1.exe
>> └── lib
>>     ├── lib1.lib
>>     └── lib2.lib
>>
>> At the moment I'm just defining a custom variable (say,
>> INSTALL_PREFIX) in the highest-level CMakeLists.txt, and basically in
>> each of the underlying CMakeLists.txt files append something to the
>> variable. For example, in libs/CMakeLists.txt I use:
>>
>> set(INSTALL_PREFIX "${INSTALL_PREFIX}/lib")
>>
>> and in examples/CMakeLists.txt:
>>
>> set(INSTALL_PREFIX "${INSTALL_PREFIX}/bin")
>>
>> and in examples/lib1/CMakeLists.txt:
>>
>> set(INSTALL_PREFIX "${INSTALL_PREFIX}/lib1")
>>
>> I'm wondering if it's idiomatic, because at the moment I'm facing a
>> few issues using this approach. For example, if I build & install only
>> examples/lib1/example1.cpp, it gets installed to "lib1/" instead of
>> "bin/examples/lib1".
>>
>> Could you please share your best practices on installing project
>> components or give me an advice on how to fix the issue(s) I'm facing?
>>
>> Thank you,
>> Egor Tensin.
>> --
>>
>> Powered by www.kitware.com
>>
>> Please keep messages on-topic and check the CMake FAQ at:
>> http://www.cmake.org/Wiki/CMake_FAQ
>>
>> Kitware offers various services to support the CMake community. For more
>> information on each offering, please visit:
>>
>> CMake Support: http://cmake.org/cmake/help/support.html
>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/cmake
>
>


More information about the CMake mailing list