Arlleex 190 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба Можно ли как-то указать компилятору, чтобы он определенную группу файлов исходного кода обрабатывал как единый общий модуль? Т.е. не все файлы проекта, а только конкретные (идеально было бы в Keil-е как-то пометить "группу"). Есть такое? В других компиляторах бывает? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба Делаете общий C-файл, включаете его в проект, а в нем уже делаете #include ваших С-шников - профит. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 8 minutes ago, Arlleex said: Есть такое? В keil такого нет, но можно индивидуально для любого исполняемого файла по ALT+F7 в окне снять галку Include In Target Build и создать, как предложил коллега makc выше, отдельный исполняемый файл, куда заинклудить нужные исполняемые файлы. Все это добро сложить в отдельную группу чтобы было наглядно. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба Вы имеете в виду что-то типа // common.cpp #include "src1.cpp" #include "src2.cpp" #include "src3.cpp" ... поставить сами src1/2/3.cpp как некомпилируемые файлы, а common.cpp компилировать? Хм. Хорошая идея, почему я сразу не подумал так сделать Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 14 minutes ago, Arlleex said: поставить сами src1/2/3.cpp как некомпилируемые файлы, а common.cpp компилировать? да, это самое простое, везде работает ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба А теперь другой вопрос: кто-нибудь так сам делает, или это я только велосипеды изобретаю?)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 32 минуты назад, Arlleex сказал: поставить сами src1/2/3.cpp как некомпилируемые файлы, а common.cpp компилировать? Именно так. 1 минуту назад, Arlleex сказал: А теперь другой вопрос: кто-нибудь так сам делает, или это я только велосипеды изобретаю?)) Так делают, я тоже так делал, но стараюсь этого избегать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 18 minutes ago, Arlleex said: или это я только велосипеды изобретаю?)) ну, типа того )) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 1 hour ago, Arlleex said: Можно ли как-то указать компилятору, чтобы он определенную группу файлов исходного кода обрабатывал как единый общий модуль? 50 minutes ago, makc said: Так делают, я тоже так делал, но стараюсь этого избегать. а можно в двух словах, зачем? я смог только придумать наличие каких-нибудь "глобальных" static функций/переменных, которые надо чтобы не торчали наружу из этой единицы компиляции, но при этом были доступны друг другу из src1/2/3.cpp. но у файлов расрширение .cpp а не .с и соответственно наличие namespace для таких случаев. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 6 минут назад, _pv сказал: я смог только придумать наличие каких-нибудь "глобальных" static функций/переменных, которые надо чтобы не торчали наружу из этой единицы компиляции, но при этом были доступны друг другу из src1/2/3.cpp. Это была одна из решаемых проблем. А вторая была связана с переименованием реализаций функций, аналогично тому, как это сделано в грабе - см. https://github.com/coreos/grub/blob/2.02-coreos/grub-core/loader/macho32.c и рядом. 7 минут назад, _pv сказал: но у файлов расрширение .cpp а не .с и соответственно наличие namespace для таких случаев. namespace это вариант, но у меня был чистый C. Еще один вариант подобных инклудов C-шников в С-шники - файлы с большими статическими таблицами консультант, которые не хочется выносить в глобальную область видимости. Проще их заинклудить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 2 hours ago, Arlleex said: Можно ли как-то указать компилятору, чтобы он определенную группу файлов исходного кода обрабатывал как единый общий модуль? Т.е. не все файлы проекта, а только конкретные (идеально было бы в Keil-е как-то пометить "группу"). Есть такое? В других компиляторах бывает? Конечно. Лет 10 точно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 1 час назад, _pv сказал: а можно в двух словах, зачем? Я хочу добиться очень хорошей оптимизации (в том числе встраиваний функций одного .cpp-модуля в другие и все чем могут похвастаться современные оптимизирующие компиляторы), при этом физически и логически разделив слои кода. 41 минуту назад, x893 сказал: Конечно. Лет 10 точно. У Вас конкретно для чего оное используется? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 42 minutes ago, Arlleex said: Я хочу добиться очень хорошей оптимизации А что проект уже не влезает в камень? Просто подобная "оптимизация" скорости коду точно не добавит. А размер - спорно, разве что эксперимента ради )) А для себя давно решил, что достаточно в опциях компилятора на весь проект ставить одну единственную крайне важную галку "One ELF Section Per Function", которая прекрасно помогает компилятору линкеру убрать из кода всякий неиспользуемый в коде хлам. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 1 час назад, Forger сказал: Просто подобная "оптимизация" скорости коду точно не добавит. А размер - спорно, разве что эксперимента ради )) Как раз скорости и добавит. Так как позволит компилятору заинлайнить те функции, которые иначе не были бы заинлайнены. А также удалить неиспользуемые части кода (например - вычисления, результаты коих не используются в вызываемых функциях). А также - многие вычисления он сможет вообще выкинуть, как дублирующиеся. И многое другое... Всё это может дать существенный прирост скорости выполнения. И чем умнее компилятор - тем больше будет выигрыш в скорости. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 1 час назад, Forger сказал: А что проект уже не влезает в камень? По размеру кода влезает пока что, с запасом. На самом деле, по скорости тоже: но мне еще нужон LwIP, а он на коротких пакетах (и максимальной сетевой скорости) итак кадры не успевает обработать(( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться