Как добавить файлы в целевой фильтр Visual Studio, но не целевые источники через CMake

Я использую CMake 3.5+ для управления своим проектом Qt5. Поскольку я работаю с CLion и Visual Studio, я бы хотел использовать целевые фильтры VS.

Как рекомендую для CMake 3.5 и Qt5, я использую CMAKE_AUTOMOC=ON а также CMAKE_INCLUDE_CURRENT_DIR=ON,

Мои файлы организованы следующим образом

myLib
impl
bar.cpp
bar_p.hpp
foo.cpp
foo_p.hpp
bar.hpp
foo.hpp

Файл CMake для myLib похоже

add_library(myLib STATIC
${CMAKE_CURRENT_LIST_DIR}/impl/bar.cpp
${CMAKE_CURRENT_LIST_DIR}/impl/foo.cpp)
target_link_libraries(myLib
PUBLIC Qt5::Core)

Шаблон для моих исходных и заголовочных файлов выглядит следующим образом:

bar.hpp:

#pragma once
#include <QtCore/QObject>

class BarPrivate;

class Bar : public QObject {
Q_OBJECT
public:
// the usual stuff
private:
QScopedPointer<BarPrivate> q_ptr;
Q_DECLARE_PRIVATE(Bar)
};

impl/bar_p.hpp:

#include "bar.hpp"
class BarPrivate {
Q_DISABLE_COPY(BarPrivate)
public:
// the usual stuff
private:
Bar* const q_ptr;
Q_DECLARE_PUBLIC(Bar)
};

impl/bar.cpp:

#include "bar.hpp"#include "impl/bar_p.hpp"
// definitions for BarPrivate
// definitions for Bar

#include "moc_bar.cpp"

Это прекрасно работает в Unix (например, в CLion) и дает мне чистые сборки без предупреждений также с Visual Studio.

Однако в VS только исходные файлы отображаются под myLib цель, в то время как заголовочные файлы помещаются под собрать все- фильтр Внешние зависимости.

Я попытался добавить заголовочные файлы к цели либо напрямую с помощью add_library или через target_sources, К сожалению, это приводит к предупреждениям компилятора (VS) или ошибкам компилятора (GCC) из-за множественных объявлений символов из мета-объектной системы Qt (как сгенерировано в файлах moc).

Как я могу получить файлы заголовков из Внешние зависимости фильтр в Visual Studio при получении стабильных сборок без предупреждений?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector