编辑:感谢下面的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
无论如何,我们将不胜感激,我为此感到无所适从,而且看起来好像很简单,我只是想念它。