LINUX.ORG.RU

[cmake]изменить путь к бинарнику


0

0

В общем хочу, чтобы при «make» бинарник создавался не в CMAKE_CURRENT_BINARY_DIR, а в его родительском каталоге.

Для этого пишу

set_target_properties(comparer PROPERTIES RUNTIME_OUTPUT_DIRECTORY «${CMAKE_CURRENT_BINARY_DIR}/..»)

И получаю при сборке:

Scanning dependencies of target comparer
[100%] Building CXX object comparer/CMakeFiles/comparer.dir/main.cpp.o
Linking CXX executable .
/usr/bin/ld: cannot open output file .: Is a directory
collect2: ld returned 1 exit status
make[2]: *** [comparer] Error 1
make[1]: *** [comparer/CMakeFiles/comparer.dir/all] Error 2
make: *** [all] Error 2

WTF? ЧЯДНТ?

★★★★★

Ответ на: комментарий от Reset

Спасибо! Но ОЛОЛО:

set(EXECUTABLE_OUTPUT_PATH «${CMAKE_BINARY_DIR}/bin») - работает.

set(EXECUTABLE_OUTPUT_PATH «${CMAKE_BINARY_DIR}») - а вот фиг! Та же ошибка. Интересно, почему?

Pavval ★★★★★ ()
Ответ на: комментарий от Pavval

Причем я делаю так:

set_target_properties(comparer PROPERTIES RUNTIME_OUTPUT_DIRECTORY «${CMAKE_BINARY_DIR}/bin») - работает.

set_target_properties(comparer PROPERTIES RUNTIME_OUTPUT_DIRECTORY «${CMAKE_BINARY_DIR}») - не работает.

Но при этом для либы:


set_target_properties(fastcompare PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - работает.

?

Pavval ★★★★★ ()

За пределы директории сборки не стоит выходить вообще. Это гарантирует изоляцию временных файлов в пределах корневой директории сборки. Если нужно выйти - это должно делаться с помощью 'make install' или прочих собственных таргетов. Ещё есть вероятность некорректной обработки относительных путей, для этого вместо:

set( somedir "${CMAKE_CURRENT_BINARY_DIR}/.." )

нужно делать:

get_filename_component( somedir "${CMAKE_CURRENT_BINARY_DIR}/.." ABSOLUTE )
Dendy ★★★★★ ()
Ответ на: комментарий от Pavval

фиг знает, мне никогда не приходило в голову делать бинари в корне

Reset ★★★★★ ()
Ответ на: комментарий от Dendy

>За пределы директории сборки не стоит выходить вообще.

Дык и не выхожу. Я хочу подняться выше от CMAKE_CURRENT_BINARY_DIR, но не за пределы корня сборки.

Ещё есть вероятность некорректной обработки относительных путей


Нет, это не оно. Ведь это не работает, хотя относительных нету:

set_target_properties(comparer PROPERTIES RUNTIME_OUTPUT_DIRECTORY «${CMAKE_BINARY_DIR}»)

Pavval ★★★★★ ()
Ответ на: комментарий от Dendy

Пасибо.

З.Ы. А я уже воспользовался бритвой Линуса и объяснил себе, что мне _не нужно_ собирать в корень сборки:)

Пишу диплом и нету времени самому разбираться/репортить баги.

Pavval ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.