CMake AutoMoc导致重复的符号

时间:2019-02-05 06:44:10

标签: c++ qt cmake

编辑:感谢下面的botje作为指针。将其切换为内联有效,并将定义移至cpp文件

我正在将Automoc用于我的CMake项目,并且在下面不断出现此错误。

我不明白为什么这会导致重复的符号?看来这应该归咎于automoc,但由于我仍然需要在这些文件上运行moc,因此很难对其进行测试。

错误

duplicate symbol __Z3foov in:
    CMakeFiles/Foo.dir/main.cpp.o
    CMakeFiles/Foo.dir/MainWindow.cpp.o
duplicate symbol __Z3foov in:
    CMakeFiles/Foo.dir/main.cpp.o
    CMakeFiles/Foo.dir/Foo_autogen/mocs_compilation.cpp.o
ld: 2 duplicate symbols for architecture x86_64

我完全看不到什么会导致此错误。这是一个复制问题的最小项目。下面的CMake文件以及我项目中的文件。

我正在Mac上和CLion内部进行编译,尽管错误当然也发生在CLion外部,因为它没有做任何特别的事情。

CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
project(Foo)

set(CMAKE_CXX_STANDARD 17)

set(SOURCE_FILES
        main.cpp MainWindow.cpp MainWindow.h constants.h)

find_package(Qt5
        ${QT5_USE_VERSION}
        COMPONENTS
        Widgets
        Core

        PATHS
        /usr/local/opt/qt5

        REQUIRED)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

qt5_use_modules(${PROJECT_NAME} Widgets Core)

main.cpp

#include <QApplication>
#include <QPushButton>


#include "MainWindow.h"


int main(int argc, char **argv) {
    QApplication app(argc, argv);

    MainWindow win;
    win.show();

    return app.exec();
}

MainWindow.h

#ifndef FOO_MAINWINDOW_H
#define FOO_MAINWINDOW_H

#include <QMainWindow>
#include "constants.h"


class MainWindow: public QMainWindow {

    Q_OBJECT

};


#endif //FOO_MAINWINDOW_H

mainWindow.cpp

// Empty File

constants.h

#ifndef FOO_CONSTANTS_H
#define FOO_CONSTANTS_H

int foo() {
    return 0;
}

#endif //FOO_CONSTANTS_H

无论如何,我们将不胜感激,我为此感到无所适从,而且看起来好像很简单,我只是想念它。

0 个答案:

没有答案