Почему я не могу собрать два взаимозависимых модуля C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу собрать два взаимозависимых модуля C++?

Сообщение Anonymous »

Я конвертирую свою библиотеку для использования модулей C++, в основном в качестве учебного упражнения.
Моя библиотека представляет собой библиотеку только заголовков, созданную из нескольких связанных друг с другом целевых объектов интерфейса CMake. Библиотека структурирована как модули, каждый из которых экспортирует целевой интерфейс CMake:

Код: Выделить всё

sound/
├─ sound_dsp/
├─ sound_math/
├─ sound_osc/
├─ sound_signal/

(etc.)
Два из этих модулей зависят друг от друга. В частности,

Код: Выделить всё

target_link_libraries(sound_signal
PRIVATE
sound::osc)

Код: Выделить всё

target_link_libraries(sound_osc
PRIVATE
sound::signal)
В версии этой библиотеки с заголовками + интерфейсными целями это работает без проблем: каждый модуль получает доступ к заголовкам другого модуля. Однако в версии модулей я вижу следующую ошибку, если пытаюсь включить модуль sound_osc в sound_signal:

Код: Выделить всё

fatal error: module 'sound:osc' not found
Кстати, если я уберу использование (т. е. импортирую :osc) и соберу библиотеку, я увижу предупреждение компоновщика:

Код: Выделить всё

ld: warning: ignoring duplicate libraries: 'modules/sound_osc/libsound_osc.a', 'modules/sound_signal/libsound_signal.a'
Каждый модуль экспортируется следующим образом.

Код: Выделить всё

// sound_osc/src/osc.ixx

export module sound:osc;

export import :phasor;
export import :ramp;

Код: Выделить всё

// sound_signal/src/signal.ixx

export module sound:signal;

export import :generate;
export import :sample;
Кто-нибудь может мне это прояснить? Могу ли я что-то сделать (кроме реструктуризации библиотеки), чтобы гарантировать, что эти два модуля могут зависеть друг от друга?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -c-modules
Ответить

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

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

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

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

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