CMake со «стандартной» версткой каталогов (Linux) - PullRequest
9 голосов
/ 11 февраля 2011

Допустим, у меня есть простой проект hello с псевдостандартным макетом каталога

helloworld/
  src/
    main.c
    say.c
    say-helper.c
  include/
    say.h
    say-helper.h
  build/

и после запуска

cd ~/helloworld/build
cmake ..
make

я ожидал бы следующее

helloworld/
  build/lib/
    libsay.a
    libsay.so
    libsay.so.1.0.0
  tmp/obj/
    main.o
    say.o
  build/bin/
    hello

и после make install я бы ожидал

/usr/local/lib/
  libsay.a
  libsay.so
  libsay.so.1.0.0
/usr/local/bin/
  hello

Как бы выглядел CMakeLists.txt для этой установки?

Я искал примеры, но единственныйодин, который я обнаружил, показывает, как добавить библиотеку и исполняемый файл не работает.

1 Ответ

8 голосов
/ 11 февраля 2011

Основные команды для описания проекта:

INCLUDE_DIRECTORIES(include)
ADD_LIBRARY(say src/say.c src/say-helper.c)

ADD_EXECUTABLE(hello src/main.c)
TARGET_LINK_LIBRARIES(hello say)

Это для размещения библиотек и исполняемого файла в каталоге сборки, поместите это в ваш CMakeLists.txt:

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)

Для установки вы указываете

 install(TARGETS say hello
            RUNTIME DESTINATION bin
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib)

в вашем CMakeLists.txt и установите CMAKE_INSTALL_PREFIX на / usr / local в вашей конфигурации.

Я не уверен, что вы можете создавать статические и динамические библиотеки одновременно с одним и тем же именем. И я не знаю, как сказать CMake поместить файлы obj в определенное место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...