cmake - 无法链接 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""
,它开始正常工作。
解决方案
这个:
file(GLOB TARGET_HEADERS "*.hpp")
add_library(nlohmann ${TARGET_HEADERS})
错在两个方面:
- 你不应该把你的来源一一列举,你应该明确地列出它们。已经有很多关于这篇文章的指导,在 CMake 中使用通配符是一个禁忌。
- 您的“库”不包含任何源代码。CMake 中的库需要诸如 .c 或 .cpp 文件之类的源代码来编译。您实际上根本不需要提及头文件,只需告诉 CMake 它需要编译的文件,而不是头文件。
推荐阅读
- javascript - 按其数组值展平和排序嵌套的对象数组
- excel - 在excel中从文本转换为日期格式
- node.js - Heroku 环境变量对 React 应用程序不可见
- frontend - Haproxy 为来自绑定 IP 地址和端口的请求返回连接重置
- git - Visual Studio 2019 不会将添加的文件暂存到 Git 存储库
- macos - 在 mac-os 上安装 Home-brew
- javascript - .save() 功能即使在使用 .markModified() 后也不起作用
- r - R studio 环境中的观察但清空数据框
- c - 如何从 PL/SQL 调用 C 函数
- javascript - JS - 元素的异步文本设置