Как написать файл cmake при использовании шаблона синглтона в C ++ - PullRequest
0 голосов
/ 15 января 2019

Теперь я собираюсь перевести один из моих проектов из проекта VS в проект cmake. И в этом проекте я использую одноэлементный класс для управления всеми другими модулями. Когда в проекте VS нет проблем, но в проекте cmake будет проблема циклической зависимости. Например, есть модуль «canbus» и синглтон-класс «менеджер».

В модуле canbus, потому что он будет использовать одноэлементный класс, поэтому файл CMakeLists.txt выглядит примерно так:

add_library(canbus STATIC
    CanBus.cpp)
target_include_directories(canbus PUBLIC
    ${CMAKE_SOURCE_DIR})
target_link_libraries(canbus PRIVATE
    manager)

И класс менеджера выглядит так:

class Manager
{
public:
    static Manager* instance();
    canbus::CanBus* getCanBus();

private:
    canbus::CanBus _canBus;

private:
    Manager(void) {}
    ~Manager(void) {}
    Manager(const Manager& rhs) = delete;
    Manager& operator=(const Manager& rhs) = delete;
};

Итак, файл CMakeLists.txt для менеджера выглядит так:

add_library(manager STATIC
    Manager.cpp)
target_include_directories(manager PUBLIC
    ${CMAKE_SOURCE_DIR})
target_link_libraries(manager PUBLIC
    canbus
    )

И между canbus и менеджером будет существовать круговая зависимость, я хотел бы знать, есть ли лучший способ решить эту проблему, или мне следует изменить структуру моего проекта? Надеюсь, кто-то знакомый с cmake может дать мне несколько советов или советов. Спасибо.

1 Ответ

0 голосов
/ 15 января 2019

Если две статические библиотеки зависят друг от друга, это просто означает, что они должны образовывать одну библиотеку.

Другой способ - не использовать target_link_libraries для библиотечных целей. Они будут хорошо скомпилированы, но вам придется вызывать target_link_libraries с обеими библиотеками, когда вы попытаетесь использовать любую из них в исполняемой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...