【问题标题】:Cannot linking cmake targets无法链接 cmake 目标
【发布时间】:2020-07-26 07:17:03
【问题描述】:

我的项目结构如下:

Project
-- CMakeLists.txt
-- src/
-- -- main.cpp
-- include/
-- -- curl/
-- -- -- *.h files
-- -- nlohmann/
-- -- -- *.hpp files
-- lib/
-- -- libcurl.lib

项目/CMakeLists:

cmake_minimum_required(VERSION 3.1)
set(PROJECT_NAME "VKAPI")
project(${PROJECT_NAME} CXX)

include_directories(${PROJECT_SOURCE_DIR}/include)

file(GLOB TARGET_SRC "./src/*.cpp")

add_executable(main ${TARGET_SRC})
target_link_libraries(main "${CMAKE_SOURCE_DIR}/lib/libcurl.lib")

install(TARGETS main DESTINATION bin)

它工作正常,但是当我启动 main.exe 时,它​​不起作用。它没有正确执行并显示消息,而是以代码 0 结束。代码:

#include <iostream>

#include "curl/curl.h"
#include "nlohmann/json.hpp"

int main()
{
    CURL* curl = curl_easy_init();

    std::cout << "That's work!" << std::endl;
    std::cout << "Hello Easy C++ project!" << std::endl;
}

但是当我删除"#include "curl/curl.h"""#include "nlohmann/json.hpp""时,它开始正常工作了。

【问题讨论】:

  • 也许这个线程帮助link
  • TARGET_CURL "./*.h") curl 目标只有标题。标题意义不大。那么这个 curl 的目标是 C++ 还是 C 项目?请注意,您不是在链接 libraries,而是在链接 cmake 目标
  • @KamilCuk,这是一个 C++ 项目。
  • @KamilCuk,它没有帮助我。

标签: cmake


【解决方案1】:

这个:

file(GLOB TARGET_HEADERS "*.hpp")

add_library(nlohmann ${TARGET_HEADERS})

在两个方面是错误的:

  1. 您不应该对您的来源进行全局化,您应该明确列出它们。已经有很多关于这方面的指导,在 CMake 中使用通配符是一个禁忌。
  2. 您的“库”不包含任何源代码。 CMake 中的库需要诸如 .c 或 .cpp 文件之类的源代码才能编译。你实际上根本不需要提及头文件,只需告诉 CMake 它需要编译的文件,而不是头文件。

【讨论】:

  • 我建议,我需要下一步:include_directories(./include/) target_link_libraries(main "./lib/libcurl.lib") 并删除其他 cmakelists (curl & nlohmann)?
  • 是的,类似的。
【解决方案2】:

我的错误:target_link_libraries(main "${CMAKE_SOURCE_DIR}/lib/libcurl.lib") 当我添加一个词INTERFACE时它起作用了:target_link_libraries(main INTERFACE "${CMAKE_SOURCE_DIR}/lib/libcurl.lib")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多