如何通过CMake将文件添加到Visual Studio目标筛选器而不是目标源

时间:2016-10-08 18:40:13

标签: c++ visual-studio-2015 cmake qt5

我使用CMake 3.5+来管理我的Qt5项目。当我与CLION和Visual Studio合作开发时,我想使用VS目标过滤器。

作为CMake 3.5和Qt5的推荐,我使用CMAKE_AUTOMOC=ONCMAKE_INCLUDE_CURRENT_DIR=ON

我的文件按以下方式组织

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

myLib的CMake文件看起来像

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目标下,而头文件放在 gather-all 过滤器外部依赖项

我尝试直接使用add_librarytarget_sources将标头文件添加到目标。不幸的是,由于来自Qt元对象系统的符号的多个声明(在moc文件中生成),这会导致编译器警告(VS)或编译器错误(GCC)。

如何在获得稳定的无警告构建的同时从Visual Studio中的外部依赖项过滤器中获取头文件?

0 个答案:

没有答案