LINUX.ORG.RU

[CMake]Узнать список объектников

 


0

0

Имеется компилятор и линковщик под одну железку.

Так вот линковщик на вход принимает один файл, в котором содержится список объектников, плюс еще доп. информация.

Как с помощью cmake узнать список объектников, которые подаются на линковку (для того чтобы потом этот список я мог с помощью configure_file подать на вход линковщикку)


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

Там другой линковщик (tulink), я могу сделать и по-другому: тупо пройтись поиском по BUILD_DIR.

Имелось ввиду, есть ли какой-то стандартный для CMake способ...

P1XeL
() автор топика

Если компилятор или линковщик не поддерживается, то есть смысл расковырять сам cmake и добавить поддержку, может быть это будет проще. Можно попробовать разработчиков напрячь.
А если всё же хочется так сделать, то я бы наверно в уже готовых makefile'ах, sed'ом вставлял правила для сборки, там есть $^.

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

Можно попробовать получить список исходников через:

get_target_property( mysources mytarget SOURCES )

и каким-то образом из них получить обьектники.

А вообще логика подсказывается, что этот механизм должен быть в toolchain файле для кросскомпиляции под вашу железку. Посмотрите примеры в /usr/share/cmake/Modules/Platform.

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

Я сам этот toolchain и написал. Изначально, под этот компилятор ничего не было. Сейчас я делаю find_file в ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${Target_Name}.Dir/, при этом в качестве имени подставляю имя файла из ${Target_Sources}.

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

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

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

Это делается примерно так:

SET(CMAKE_C_LINK_EXECUTABLE «<CMAKE_LINKER> <OBJECTS> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>»)

Я предполагаю, что <OBJECTS> как раз содержит весь список объектников, однако получить его в явном виде не удалось.

В моем случае это должно замениться на:

SET(CMAKE_C_LINK_EXECUTABLE «${CMAKE_LINKER} FILE_FOR_STUPID_LINKER»)

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

Я уже понял, что у CMake нет механизма для вашего линкера, поэтому предлагаю так:

set( CMAKE_C_LINK_EXECUTABLE «/path/to/my/script/that/converts/arguments/into/file/and/passes/them/to/real/linker <OBJECTS> --other-flags-for-linker <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>» )

Скрипт будет выбирать файлы до --other-flags-for-linker и писать в файл, а то что после - просто подставлять в линкер аргументами.

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