Почему я не могу собрать два взаимозависимых модуля 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

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