Должен ли я сделать отдельную библиотеку, если несколько целей Cmake должны использовать модуль C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Должен ли я сделать отдельную библиотеку, если несколько целей Cmake должны использовать модуль C ++?

Сообщение Anonymous »

У меня есть целая куча статических библиотек, и многие из них нуждаются в C ++ 20 'json-module', который я сделал. Итак, я делаю: < /p>
target_sources(lib_OS_interface_and_gui
PRIVATE

FILE_SET CXX_MODULES FILES
${COMMON_SOURCE_DIR}/Serialisation/JSON/json.cppm
)
< /code>
Но другие цели нуждаются в этом также, поэтому я делаю: < /p>
target_sources(lib_gpu_interface
PRIVATE
FILE_SET CXX_MODULES FILES
${COMMON_SOURCE_DIR}/Serialisation/JSON/json.cppm
)
< /code>
, как только у меня есть несколько целей с одним и тем же модулем, я получаю ошибку: < /p>
CMake Error: Disagreement of the location of the 'json_module' module.
Location A:
'MyEngine/CMakeFiles/lib_gpu_interface.dir/json_module.pcm' via
by-name; Location B:
'MyEngine/CMakeFiles/lib_OS_interface_and_gui.dir/json_module.pcm' via
by-name.
< /code>
мне сказали, что модули разрешаются во время компиляции, и не отложены, как со статическими библиотеками, символы которых разрешены позже во время создания исполняемого файла. Поэтому каждая цель должна знать, где находится модуль, и единственный способ, которым я думал сделать это, - это просто добавить модуль к каждой цели. Но теперь я получаю конфликты. Если я изменю один из них на: < /p>
target_sources(lib_OS_interface_and_gui
PUBLIC #
И я тщательно организую заказ правильно, тогда я могу заставить его работать, но, похоже, это может сломать в других сценариях. Мне сказали, что то, что я мог сделать, это создать цель для каждого модуля и связать любую цель, которая нуждается в модуле с этой целью. Это похоже на взлом, не так ли? Нужно ли мне превратить каждый модуль, который у меня есть в цель? Я перехожу из простой библиотеки только для заголовков, и это было намного проще, просто включите ее. Должен ли я сделать отдельную цель cmake для каждого из моих модулей?


Подробнее здесь: https://stackoverflow.com/questions/797 ... to-use-a-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»