Error in QT when include target_link_libraries(cloud_analizer PUBLIC CGAL::CGAL_Basic_viewer) in CMakeLists.txt #8572
-
I have tried to add CGAL in a project that I have in Qt6 but if I include CGAL I get an error that according to my research, is because it does not find QObject, but I am also including Core which is supposed to be where QObject goes. CMakeLists.txt file cmake_minimum_required(VERSION 3.5)
project(cloud_analizer VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Core Gui Concurrent Sql WebSockets WebChannel WebEngineWidgets WebView)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Core Gui Concurrent Sql WebSockets WebChannel WebEngineWidgets WebView)
set(CGAL_DIR "C:/dev/CGAL-6.0/lib/cmake/CGAL")
find_package(CGAL REQUIRED COMPONENTS Qt6 Core)
include_directories("C:/Program Files/MySql/MySQL Server 8.0/include")
include_directories("C:/Program Files/boost/boost_1_83_0")
link_directories("C:/Program Files/MySql/MySQL Server 8.0/lib")
link_directories("C:/Program Files/boost/boost_1_83_0/lib")
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(cloud_analizer
MANUAL_FINALIZATION
${PROJECT_SOURCES}
api.h api.cpp
funciones_standar.h funciones_standar.cpp
cloudfunctions.h cloudfunctions.cpp
cloudserver.h cloudserver.cpp
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET cloud_analizer APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(cloud_analizer SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(cloud_analizer
${PROJECT_SOURCES}
)
endif()
endif()
if(CGAL_Qt6_FOUND)
target_link_libraries(cloud_analizer PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt6::WebView Qt6::Core Qt6::Gui Qt6::Concurrent Qt6::Sql Qt6::WebSockets Qt6::WebChannel Qt6::WebEngineWidgets mysqlclient)
target_link_libraries(cloud_analizer PRIVATE CGAL::CGAL_Basic_viewer)
else()
target_link_libraries(cloud_analizer PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt6::WebView Qt6::Core Qt6::Gui Qt6::Concurrent Qt6::Sql Qt6::WebSockets Qt6::WebChannel Qt6::WebEngineWidgets mysqlclient)
message(STATUS "NOTICE: Several examples require Qt6 and will not be compiled.")
endif()
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.cloud_analizer)
endif()
set_target_properties(cloud_analizer PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
include(GNUInstallDirs)
install(TARGETS cloud_analizer
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(cloud_analizer)
endif() By adding the lines
mainwindows.h File #ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QObject>
#include <QtWebSockets/QtWebSockets>
#include "cloudfunctions.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class CloudFunctions;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void testSlot();
private:
Ui::MainWindow *ui;
CloudFunctions *mCloud;
};
class DataObject : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE QStringList getData() const {
return QStringList() <<"value1";
}
};
#endif // MAINWINDOW_H From these two lines, you start to ignore |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 5 replies
-
That is because That means you need to replace:
... I wonder if that should be considered as a bug for CGAL. We should not enforce our choices to CGAL users. |
Beta Was this translation helpful? Give feedback.
That is because
CGAL::CGAL_Basic_viewer
enforces the definition of the preprocessor macroQT_NO_KEYWORDS
.That means you need to replace:
slots
byQ_SLOTS
signals
byQSIGNALS
,emit
byQ_EMIT
, andforeach
byQ_FOREACH
.... I wonder if that should be considered as a bug for CGAL. We should not enforce our choices to CGAL users.