使用不同文件夹上的文件来刷新AUTOMOC

时间:2016-05-11 00:34:54

标签: c++ qt cmake moc

我有一个简单的CMake项目:

class a(object):
    **body**

class b(object):
    **body

的CMakeLists.txt:

from file1 import a

A.H:

proj (project folder)
├── a.h
├── a.cpp
└── CMakeLists.txt

a.cpp:

cmake_minimum_required(VERSION 3.2)

set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_AUTOMOC ON)

project(proj)

set( proj_SOURCE
    a.cpp
)

find_package(Qt5Core)

set( proj_LIBRARIES
    Qt5::Core
)

add_library(proj SHARED ${proj_SOURCE})
target_link_libraries(proj ${proj_LIBRARIES})

一切都很好。接下来,我尝试将头文件和源文件移动到不同的文件夹中,如下所示:

#pragma once

#include <QObject>

class A : public QObject
{
    Q_OBJECT
public:
    explicit A(QObject *parent = 0);
};

尝试了以下调用的不同配置:

#include "a.h"

A::A(QObject *parent) : QObject(parent)
{
}

不管我做什么,编译都会因

的变化而失败
proj (project folder)
├── include
│   └── a.h
├── src
│   └── a.cpp
└── CMakeLists.txt

我不知道是否需要为CMake设置额外的工作或问题是什么。 This回答说CMake在这种配置上不起作用(不同文件夹上的文件),但也许有办法吗?

1 个答案:

答案 0 :(得分:5)

从CMake用户列表:似乎在这个特定配置上,需要将头文件添加到目标。我仍然不知道原因,但下面的代码回答了上述问题。

cmake_minimum_required(VERSION 3.2)

set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_AUTOMOC ON)

project(proj)

set( proj_SOURCE
    a.cpp
)

# add this
set( proj_HEADER
    include/a.h
)

find_package(Qt5Core)

set( proj_LIBRARIES
    Qt5::Core
)

# modify this
add_library(proj SHARED ${proj_SOURCE} ${proj_HEADER})
target_link_libraries(proj ${proj_LIBRARIES})