纽比在这里介绍了QT创建者和CMake,并为这个基本问题道歉,但很难将简单的外部库链接到我的主要项目。以下是项目路径:
build-QMLTest-Desktop_Qt_6_3_1_MinGW_64_bit-Debug // application binary path
QMLLib
build-mylib-Desktop_Qt_6_3_1_MinGW_64_bit-Debug // lib binary path
mylib
CMakeLists.txt
mylib.cpp // lib source path
mylib.h
QMLTest
CMakeLists.txt
main.cpp // application source path
下面是我如何链接静态库(QMLTest/CMakeLists.txt的片段)。我使用这个线程作为参考:
How do I explicitly specify an out-of-tree source in CMake?
add_subdirectory(../QMLLib/mylib ../QMLLib/build-mylib-Desktop_Qt_6_3_1_MinGW_64_bit-Debug)
target_link_libraries(mylib)
set(PROJECT_SOURCES
main.cpp
qml.qrc
)
main.cpp
#include "../QMLLib/mylib/mylib.h"
int main(int argc, char *argv[])
{
Mylib mylib;
但是,它无法解决,这是输出
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/QMLTest.dir/main.cpp.obj: in function `qMain(int, char**)':
C:/myroot/UITest/QMLTest/main.cpp:13: undefined reference to `Mylib::Mylib()'
collect2.exe: error: ld returned 1 exit status
我没有得到一个答案,所以50分的争夺,因为我不能解决这个问题。
理想情况下,如果您可以使用CMake和QtCreator8.0向我指出最近的项目,制作一个简单的项目和库并将它们链接在一起,那就太好了。
发布于 2022-10-03 17:13:12
首先,尝试分隔目录以添加add_subdirectory
命令参数,以确保库子目录中的所有内容都已编译完毕。然后正确使用target_link_libraries
命令:
add_subdirectory(../QMLLib/mylib)
set(PROJECT_SOURCES
main.cpp
qml.qrc
)
include_directories(../QMLLib/mylib/include)
# Link subdir target AFTER definition of the project target
add_library(myproject ${PROJECT_SOURCES})
target_link_libraries(myproject mylib)
我建议您参考我在将库导入现有项目时使用的actual CMakeLists.txt
file (尽管基于ROS,但CMake的工作方式相同)。从那里提取命令序列就行了。
https://stackoverflow.com/questions/73915430
复制相似问题