Как мне сделать вывод CMake в директорию bin? - PullRequest
152 голосов
/ 06 июля 2011

Я сейчас строю проект со структурой плагинов. Я использую CMake для компиляции проекта. Плагины скомпилированы в отдельных каталогах. Моя проблема в том, что CMake компилирует и сохраняет двоичные файлы и плагины, динамические библиотеки, в структуре каталогов исходного кода. Как сделать так, чтобы CMake сохранял файлы в директории . / Bin ?

Ответы [ 8 ]

249 голосов
/ 06 июля 2011

Как и в ответе Олега, я считаю, что правильная переменная для установки - CMAKE_RUNTIME_OUTPUT_DIRECTORY . Мы используем следующее в нашем корне CMakeLists.txt:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

Вы также можете указать выходные каталоги для каждой цели:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

В обоих случаях вы можете добавить _[CONFIG] к имени переменной / свойства, чтобы сделать выходной каталог применимым к конкретной конфигурации (стандартные значения для конфигурации: DEBUG, RELEASE, MINSIZEREL и RELWITHDEBINFO ).

26 голосов
/ 06 июля 2011

Использование set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

7 голосов
/ 06 июля 2011

Используйте переменную EXECUTABLE_OUTPUT_PATH CMake, чтобы установить нужный путь. За подробностями обращайтесь к онлайн-документации CMake:

CMake 2.8.8 Документация

3 голосов
/ 13 июля 2018

Что касается меня, я использую cmake 3.5, ниже (set variable) не работает:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

, но это работает (set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)
3 голосов
/ 03 апреля 2016
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
1 голос
/ 19 июня 2018

Английский не мой родной язык;извините за ошибки при наборе.

используйте эту конфигурацию строки:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
поместите ваш любой проект CMakeLists.txt.
этот $ {PROJECT_SOURCE_DIR} является вашим текущим исходным каталогом, гдепроектное место.
и, если бродить, почему $ {EXECUTABLE_OUTPUT_PATH}
проверить этот файл CMakeCache.txt, затем найти в ключевом слове output path,
все переменные, определенные здесь, это даст полное объяснениепроект все setting·

1 голос
/ 03 апреля 2018
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)
0 голосов
/ 11 июня 2019

Независимо от того, определяю ли я это в основном CMakeLists.txt или в отдельных файлах, он все еще предполагает, что я хочу, чтобы все библиотеки и библиотеки находились вне основного пути, что является наименее полезным предположением из всех.

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