迁移Qt项目文件到CMake
Migrating Qt project file to CMake
我正在尝试迁移一个QtProject文件,正是来自https://github.com/gamecreature/QtAwesome的QtAwesome库
我要迁移的项目文件是:
TARGET = QtAwesome
TEMPLATE = lib
CONFIG += staticlib c++11
SOURCES += QtAwesome.cpp
HEADERS += QtAwesome.h
isEmpty(PREFIX) {
unix {
PREFIX = /usr
} else {
PREFIX = $$[QT_INSTALL_PREFIX]
}
}
install_headers.files = QtAwesome.h
install_headers.path = $$PREFIX/include
target.path = $$PREFIX/lib
INSTALLS += install_headers target
RESOURCES +=
QtAwesome.qrc
我的翻译是:
cmake_minimum_required(VERSION 2.8.11)
project(QtAwesome)
file(GLOB_RECURSE CODE_FILES QtAwesome.cpp)
find_package (Qt5Core REQUIRED)
ADD_DEFINITIONS(-DQTAWESOME_LIBRARY)
qt5_add_resources(RESOURCE_FILES QtAwesome.qrc)
qt5_wrap_cpp(LIB_HEADER_MOC QtAwesome.h)
add_library(QtAwesome STATIC QtAwesome.cpp QtAwesome.h)
target_link_libraries(QtAwesome
Qt5::Widgets
)
可以编译,但是当我尝试使用这个构建的库时,我得到以下错误:
[100%] Linking CXX executable MyProject.exe
QtAwesome.lib(QtAwesome.cpp.obj) : error LNK2019: unresolved external symbol "int __cdecl qInitResources_QtAwesome(void)" (?qInitResources_QtAwesome@@YAHXZ) referenced in function "public: bool __cdecl QtAwesome::initFontAwesome(void)" (?initFontAwesome@QtAwesome@@QEAA_NXZ)
MyProject.exe : fatal error LNK1120: 1 unresolved externals
在你的cmake项目中有几个问题:
file(GLOB_RECURSE CODE_FILES QtAwesome.cpp)
你没有在任何地方使用CODE_FILES
。此外,将glob与文件名一起使用而不是文件模式是没有意义的,并且不应该使用glob来收集源代码(请参阅文档)。
ADD_DEFINITIONS(-DQTAWESOME_LIBRARY)
QTAWESOME_LIBRARY
在QtAwesome代码的任何地方都没有使用(参见存储库中的搜索结果)。无论如何,如果你必须添加定义,你可以考虑target_compile_definitions
代替。
qt5_add_resources(RESOURCE_FILES QtAwesome.qrc)
qt5_wrap_cpp(LIB_HEADER_MOC QtAwesome.h)
RESOURCE_FILES
和LIB_HEADER_MOC
在调用add_library
时不添加到源:资源和moc文件不会被编译到您的库中(我猜这是您这里的主要问题)。您可以考虑使用CMAKE_AUTOMOC
和CMAKE_AUTORCC
。
find_package (Qt5Core REQUIRED)
# ...
target_link_libraries(QtAwesome
Qt5::Widgets
)
您正在链接Widgets
模块,而只寻找Core
模块。
在你的cmake项目中你不需要c++ 11标准:你可能需要使用CMAKE_CXX_STANDARD
,或者,如果你知道需要标准的哪一部分,使用编译功能。
清理后,您的cmake项目可能看起来像这样:
cmake_minimum_required(VERSION 2.8.11)
project(QtAwesome)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 REQUIRED COMPONENTS Widgets)
add_library(QtAwesome STATIC
QtAwesome.cpp
QtAwesome.h
QtAwesome.qrc
)
target_link_libraries(QtAwesome
Qt5::Widgets
)
我发现这很有帮助https://github.com/qt/qtbase/blob/dev/util/cmake/run_pro2cmake.py
我能够将qmake (.pro)项目转换为cmake。它生成了一个工作的CMakeLists.txt
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 尝试将 boost::stacktrace 添加到 CMake 项目时出现构建错误
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 如何将图像文件夹添加到CMake项目以便在c ++可执行文件中使用这些图像?
- 如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?
- CMake 项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中
- CMake 插入不带文件夹前缀的项目文件
- CMAKE QT创建者:将标题文件添加到项目文件中
- CMAKE 错误项目文件无效;不包含 cmakelists.txt
- 从CMake文件生成Embarcadero项目文件
- 如何在cmake项目中包含/usr/include中的头文件
- 如何将在依赖项 CMake 项目中创建的 Protobuf 生成的 .h 文件正确导入到父 CMake 项目中
- 使用CMake为MonoDevelop生成项目文件
- 无法加载Qt5/cmake项目中Qt资源文件中指定的图像
- 将LLVM添加到我的Cmake项目中:为什么LLVM的Cmake文件中有硬编码路径?
- 迁移Qt项目文件到CMake
- 在 CMake 项目下编译单个文件
- CMAKE on (tortoisesvn) SVN project::配置过程中出现错误,项目文件可能无效
- 如何使QtCreator在CMake项目的单独分组中显示头文件和源文件