LINUX.ORG.RU

Попросить make/cmake/bat забрать объектные файлы из какой-то директории

 , ,


0

1

Привет!

В процессе разработки некоего проекта захотел вытащить часть кода в опенсорс. Проект специфичный, код под 6502, что в принципе не особо дает разгуляться компиляции в виде библиотеки. Поэтому план такой:

  1. Выделить код в отдельные файлы
  2. Написать make-файл чтобы он компилировал их в .o в отдельный каталог
  3. Создать инструкцию для разработчиков как попросить их make инклуднуть мои объектники.

1 и 2 в принципе ерунда. Задумался над 3. А если у них не make? А если cmake? Кто может подсказать, что мне написать в инструкции (какие-то минимальные действия) чтобы не сильно напрягать человека когда он будет использовать мой проект?

В конкретно для 6502 всё очень плохо в плане качества кода и разработок, поэтому каких-то стандартных make-файлов или сред нет.

Вот, что используют пара проектов этой направленности при работе с объектниками:

$(NAME).nes: $(NAME).o crt0.o $(CFG)
	$(LD65) -C $(CFG) -o $(NAME).nes crt0.o $(NAME).o nes.lib -Ln labels.txt --dbgfile dbg.txt
	rm *.o
	@echo $(NAME).nes created

```bat
@del example.o
@del example.nes
@del example.map.txt
@del example.labels.txt
@del example.nes.ram.nl
@del example.nes.0.nl
@del example.nes.1.nl
@del example.nes.dbg
@echo.
@echo Compiling...
cc65\bin\ca65 example.s -g -o example.o
@IF ERRORLEVEL 1 GOTO failure
@echo.
@echo Linking...
cc65\bin\ld65 -o example.nes -C example.cfg example.o -m example.map.txt -Ln example.labels.txt --dbgfile example.nes.dbg
@IF ERRORLEVEL 1 GOTO failure
@echo.
@echo Generating FCEUX debug symbols...
python example_fceux_symbols.py
@echo.
@echo Success!
@pause
@GOTO endbuild
:failure
@echo.
@echo Build error!
@pause
:endbuild
#!/bin/sh

ca65 crt0.s
cc65 -Oi example1.c --add-source
ca65 example1.s 
./cc65/bin/ld65 -C nrom_128_horz.cfg -o draw25.nes crt0.o example1.o runtime2.lib 
★★★★★

Я вообще не понял как «вытаскивание кода в опенсорс» связано с распространениеи какой-то объектной блобятины. Хочешь вытащить исходники - вытаскивай исходники, а .o твою машину вообще не должны покидать.

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

Я и не собираюсь распространять «блобятину». Но при билде моего кода могут понадобиться отдельные флаги и опции. Поэтому я хочу сделать make файл для сборки своего кода чтобы не требовать от пользователя миллион изменений. Достаточно инструкций как включить мои файлы после сборки себе.

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

Но при билде моего кода могут понадобиться отдельные флаги и опции

Ну так и перечисли их в доке без привязки к системам сборки

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

Перечисли под один с указанием что в других компиляторах флаги могут отличаться, или сразу подо все, или ни под какие и опиши словами что надо настроить.

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

Да не флаги отличаются, а синтаксис. Например P65 и ca65 несовместимы.

и опиши словами что надо

Люди ленивы. Чем больше действий требуется тем меньше шанс что кто-то будет этим пользоваться. Какой смысл тратить половину дня на то, чтобы что-то подключить и настроить?

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

Да не флаги отличаются, а синтаксис. Например P65 и ca65 несовместимы.

Пользователи компиляторов сами знают какой у них синтаксис. Речь не о нём, а о специфических для твоего кода флагах. Ты спросил:

что мне написать в инструкции (какие-то минимальные действия) чтобы не сильно напрягать человека когда он будет использовать мой проект

Я ответил - только эти флаги. Если можешь для нескольких компиляторов то несколько. Если не можешь то словами что нужно и почему. Это те самые минимальные действия, и они не сильно напрягают. Напрягает вытаскивание этих флагов из всяких портянок на make, shell и bat, и напрягает интеграция с какими-то объектниками которые нужно собирать чуждым для $моясистемасборки способом. Может у тебя и флагов-то никаких нет, достаточно выложить .[ch] файлы.

Чем больше действий требуется тем меньше шанс что кто-то будет этим пользоваться. Какой смысл тратить половину дня на то, чтобы что-то подключить и настроить?

Это тебе виднее, я лично не представляю зачем тратить время на программирование всякого архаичного говна без экосистемы.

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

достаточно выложить .[ch] файлы.

Это НЕ Си проект, ну епт. Первый же пост. Это ассемблер со специфичным для одного компилятора синтаксисом. Его НЕЛЬЗЯ собрать другим компилятором.

время на программирование всякого архаичного говна без экосистемы.

Ну вот так сразу и сказали бы, а не влезали в пост. Я бы вас расстроил наличием огромного количества программистов под 6502, выходом множества тайтлом на нем даже в последние годы, но вы мне все равно не поверите.

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

Это НЕ Си проект, ну епт. Первый же пост. Это ассемблер со специфичным для одного компилятора синтаксисом. Его НЕЛЬЗЯ собрать другим компилятором.

Зачем же ты мозг делаешь упоминая вообще другие компиляторы?

Я бы вас расстроил наличием огромного количества программистов под 6502, выходом множества тайтлом на нем даже в последние годы, но вы мне все равно не поверите.

Если что то посыл именно к этому - они разберутся как подключать твою поделку.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)

Выделить код в отдельные файлы
Написать make-файл чтобы он компилировал их в .o в отдельный каталог
Создать инструкцию для разработчиков как попросить их make инклуднуть мои объектники.

Ты решил переизобрести статическую библиотеку?

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

дак для статической библиотеки нужен ar, а не компилятор, не?

Сторонние обьектники в cmake подключаются стандартным target_link_libraries, с этим не будет проблем.

Но в любом случае, если планируется интеграция в другие сборочные системы, то надо не инструкции писать, а соответствующие конфигурационные файлы - например pkg-config, как самый простой и универсальный, cmake умеет с ним работать.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от slovazap

Хочешь вытащить исходники — вытаскивай исходники, а *.o твою машину вообще не должны покидать.

Наоборот, если исходники отдавать нельзя не хочется, отдавать объектники это самое правильное, потому что к ним можно дописать нужные стабы, дабы нивелировать разницу в лейаутах всяческих struct stat, заполировать objcopy(1) и слинковать в нативный бинарник, например, для FreeBSD.

Если бы все так делали, под фрю было бы больше нативных проприетарных программ и меньше секса с линуксолятором и несовместимыми версиями glibc сотоварищи.

danfe
()

Я прочитал и нихрена не понял, что надо ТС.

VPATH что ли? Ну так это в мане на make описано, да.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от danfe

К великому счастью проприетарные писаки к таким как ты не прислушиваются, и нативной проприетарщины под фрю мало - для меня это одна из немногих причин её любить и использовать. Секс с линуксулятором для таких как ты - предателей F/OSS - это ещё гуманное наказание.

slovazap ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.