CMake add_custom_command из подключаемого файла
Подскажите, как заставить (или прописать) команду (add_custom_command), выполняться из подключаемого MakeLists.txt файла ?
У меня есть основной файл CMakeLists.txt, который в свою очередь вызывает другой CMake файл из иной директории следующим способом:
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../Resource\ files\ Extention ${CMAKE_CURRENT_BINARY_DIR}/Resource\ files\ Extention)
В вызываемом файле есть команда:
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME_ONLY}.o
WORKING_DIRECTORY ${FILEPATH_ONLY}
COMMAND ${CMAKE_OBJCOPY}
ARGS -I binary -O elf64-x86-64 -B i386 ${FILENAME_ONLY} ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME_ONLY}.o )
Данная команда, должна формировать объектные файлы из бинарных, однако выполняет она свою функцию лишь если переместить ее в основной CMakeLists.txt файл. Если же она находится в вызываемом файле, то данная команда игнорируется и файлы не формируются.
Как я понял погуглив, команды добавляемые с помощью add_custom_command - должны всегда находиться в основном файле, однако я для своих целей намерен вынести ее в сторонний файл. Подскажите можно ли сделать подобное ?
Ответы (1 шт):
У вас проблема в этой строке:
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../Resource\ files\ Extention ${CMAKE_CURRENT_BINARY_DIR}/Resource\ files\ Extention)
subdirectory, как ни странно, должна быть именно субдиректорией! Вы не можете легально включить в CMakeLists.txt другой CMakeLists.txt если он не находится в одной из субдиректорий. Вообще в таких случаях cmake генерит ошибку а-ля:
CMake Error at CMakeLists.txt:5 (add_subdirectory):
add_subdirectory not given a binary directory but the given source
directory "/home/levkovitch/Public/tmp/cmake_test/beta" is not a
subdirectory of "/home/levkovitch/Public/tmp/cmake_test/alpha". When
specifying an out-of-tree source a binary directory must be explicitly
specified.
Посмотрите - у вас должна быть аналогичная