LINUX.ORG.RU

список удаляемых файлов в cmake

 ,


0

1

Зачесалось тут прикрутить cmake для разработки прошивки 8051-совместимого контроллера. За неимением альтернатив компилятор — sdcc-3.4.0. В общем, по мануалу, найденному в гугле, создаю toolchain.cmake

# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Generic)

# which compiler to use for C (dummy for CXX)
SET(CMAKE_C_COMPILER sdcc)
SET(CMAKE_CXX_COMPILER true) 

# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH /usr/share/sdcc)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRIRY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# set proper linker flags
SET(CMAKE_EXE_LINKER_FLAGS "--out-fmt-ihx --code-loc 0x400 --code-size 0x8000 --xram-loc 0xf000 --xram-size 0x300 --iram-size 0x100" CACHE STRING "Linker flags" FORCE)

и файл с проектом CMakeLists.txt:

PROJECT("TEST" C)
ADD_EXECUTABLE(hello bsp.c main.c)

Сборка такого мелкого проекта вполне работает после

$ mkdir build && cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..

Но вот make clean не удаляет все файлы: остаются hello.lk, hello.map, hello.mem.

Подскажите, пожалуйста, куда копать, чтобы в спецификации тулчейна задать дополнительные файлы для цели clean.

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

Речь не о том, как они готовятся, а о том, что cmake ничего не знает как они готовятся, и что они должны быть.

Можешь добавить фейковую команду к целям генерирующим эти файлы, и указанным аутпутом этих файлов.

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

Либо, добавь кастомную команду к цели clean.

аля

add_custom_command(TARGET clean
                   POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E remove <Files List>
     
)

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

спасибо за совет; как я понял, мне нужно что-то типа add_custom_command(). Получается, что add_executable не вычисляет, какие файлы генерирует линкер?

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

Нет, не вычисляет, насколько мне известно. Все обьектники, либы, и генерируемые файлы должны быть целями, иначе cmake про них ничего не будет знать.

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

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

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

наверное, ты прав. Кстати, а если у меня в CMakeLists.txt несколько add_executables(), есть ли какой-то нормальный способ получить их список, чтобы добавить в clean?

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

Без понятия, вообще да как то кривенько такие весчи в cmake решаются :)

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

похоже, что это именно то, что нужно. Благодарю.

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

а нет, ошибся. Это свойство исходного файла (bsp.c, hello.c). Мне бы аналогичное, но для цели (hello).

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