首页 > 解决方案 > 无法链接 cmake 目标

问题描述

我的项目结构如下:

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""and时"#include "nlohmann/json.hpp"",它开始正常工作。

标签: cmake

解决方案


这个:

file(GLOB TARGET_HEADERS "*.hpp")

add_library(nlohmann ${TARGET_HEADERS})

错在两个方面:

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

推荐阅读