【问题标题】:QT creator and CMake, cannot link to external libraryQT 创建者和 CMake,无法链接到外部库
【发布时间】:2022-10-07 10:56:33
【问题描述】:

Newbee 在 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
)

主文件

#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 和 QT Creator 8.0 制作一个简单的项目和库并将它们链接在一起的项目,那就太好了。

    标签: cmake qt-creator qt6


    【解决方案1】:

    首先,尝试将要添加到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 的工作方式相同)。只需从那里提取命令序列。

    【讨论】:

    • 它现在对我有用,add_subdirectory 要求两个参数。一个是源,第二个是库的二进制文件。我会更仔细地研究你的项目。这可能是一件非常简单的事情。
    • @gmmo 第二个参数是可选的,除非子目录中没有 CMakeLists.txt
    【解决方案2】:

    我最终重新排列了文件夹,解决方案在这里:

    Cannot add library source to cmake project on QT

    我只包含来自一个单独的库项目的源代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多