CMake 在 include_directories 中找不到正确的头文件/包含文件

2024-03-27

当我尝试编译时,我再次收到“架构 x86_64 的未定义符号”错误。我已经尝试了比这篇文章中实际记录的更多的内容(因为我已经忘记了我尝试过的所有内容)。这是一个非常简单的设置should使用 CMake 很容易编译...

当我对此运行 make 时,它​​工作得很好。但我想将其转换为 CMake 以实现互操作性。正如你所看到的,我已经将“${HEADERS}”变量扔到了几个地方,我已经尝试了很多位置,但我不断收到错误。根据我放置 ${HEADER} 的位置,它还可以在技术上生成“错误:在生成多个输出文件时无法指定 -o”的错误(如果它only位于 target_link_library 声明中)。

我有 2 个文件夹:

Root
    Headers (contains all .h files)
    Source (contains all .cc/.cpp/.c files) (and also a CMakeLists.txt)
CMakeLists.txt

我的根 CMakeLists.txt 包含以下内容:

cmake_minimum_required(VERSION 2.8.4)
project(Framework)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_compile_options("-v")

add_subdirectory(Source)

#Variables for making my life easier and adding the headers
set(H Headers)
include_directories(${H})
set(S Source)
file(GLOB HEADERS
#Add any file in the headers dir
"${H}/*"
)

# Create a variable to use for main.cc
set(MAIN ${S}/main.cc ${HEADERS})

# Add the main.cc file and headers
add_executable(Framework ${MAIN} ${HEADERS})

# Add the .cc/.cpp files
target_link_libraries(Framework ${SOURCE_FILES})

我的源目录中的 CMakeLists.txt 包含以下内容:

file(GLOB SOURCES
"*.cc"
"*.cpp"
)

add_library(SOURCE_FILES ${SOURCES})

我认为标题中没有,文档表明我们不需要。

谢谢您的帮助。我看过:

  • cmake 包括其他目录中的 h 文件 https://stackoverflow.com/questions/9985315/cmake-including-h-files-from-other-directories
  • http://www.cmake.org/cmake/help/v2.8.0/cmake.html http://www.cmake.org/cmake/help/v2.8.0/cmake.html(适用于版本 2.x 和 3.x)
  • CMake 添加标头到项目文件 https://stackoverflow.com/questions/21654867/cmake-adding-headers-to-projectfile-- 有可能找到解决方案,但最终说“我不知道”:(
  • 以及许多其他各种邮件列表和其他网站

这里的主要问题是你指的是SOURCE_FILES目标就好像它是一个变量一样。删除美元符号和花括号。

target_link_libraries(Framework SOURCE_FILES)

你设置的似乎也有点奇怪include_directories打电话后add_subdirectory,如果这有效的话我会感到惊讶。

总的来说,我认为你让事情变得比他们需要的更复杂。以下应该是所有必要的内容。

顶级 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Framework CXX)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic")

include_directories(
  ${PROJECT_SOURCE_DIR}/Headers
)

add_subdirectory(Source)

来源/CMakeLists.txt

# Do not use file globing because then CMake is not able to tell whether a file
# has been deleted or added when rebuilding the project.
set(HELLO_LIB_SRC
  hello.cc
)
add_library(hello ${HELLO_LIB_SRC})

set(MAIN_SRC
  main.cc
)
add_executable(hello_bin ${MAIN_SRC})
target_link_libraries(hello_bin hello)

标头/hello.h

#pragma once

#include <string>

namespace nope
{
  std::string hello_there();
}

来源/hello.cc

#include <hello.h>

namespace nope
{
  std::string hello_there()
  {
    return "Well hello there!";
  }
}

来源/main.cc

#include <hello.h>
#include <iostream>

int main()
{
  std::cout << nope::hello_there() << std::endl;
  return 0;
}

不必担心构建文件夹中文件的放置。这是安装步骤需要弄清楚的。

$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
$ make
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 在 include_directories 中找不到正确的头文件/包含文件 的相关文章

随机推荐

  • 使用 Cloudformation 的 AWS Api Gateway 代理资源?

    我正在尝试从 API 网关端点代理配置为网站的 S3 存储桶 我使用控制台成功配置了端点 但无法使用 Cloudformation 重新创建配置 经过大量的试验 错误和猜测 我想出了以下 CF 堆栈模板 它让我非常接近 Resources
  • PHP / PDO:SQl 查找包含字符串值的行[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我尝试发出请求来查找包含特定字符串值的行 这是我的代码的摘录 Getting motscles value motscles PO
  • 替换 DataFrame 索引中的 NaN

    我有一个数据框 如下所示 one two a 2 5 b 3 6 NaN 0 0 如何用字符串替换索引中的 NaN 例如 无标签 I tried df df replace np NaN No label and df index df i
  • 从嵌套 javascript 对象中删除属性的最佳方法是什么?

    我有一个树对象 如下所示 我尝试删除 items 数组属性 如果它为空 我不确定执行此操作的最佳方法是什么 我正在考虑循环遍历密钥 检查属性 然后删除使用delete myJSONObject prop 欢迎任何想法 想法吗 text Tr
  • 使用.Net MVC,如何列出播放不同文件的多个html音频播放器?

    我和我的朋友正在使用 Net 开发一个大学项目 我们正在尝试建立一个网站 允许用户以类似于 Soundcloud 等网站的方式收听音频剪辑 目前 我们有一个基本的 MVC 站点 允许用户将音频上传到服务器文件系统 并在数据库表中记录有关该文
  • 通过 bash 过滤 json - 不区分大小写

    我有 json 代码 需要通过属性的值对其进行过滤DNSName 过滤器必须不区分大小写 我怎样才能做到这一点 有没有可能解决它jq 这就是我创建 json 代码的方式 aws elbv2 describe load balancers r
  • 当生成的存在类型过于复杂时,无形状 HList 上的 toList 会失败

    给出以下定义 class R T class A class B class C 这有效 val s1 new R A new R B HNil val r1 s1 toList r1 of type List R gt A with B
  • Flutter firebase 未初始化

    我收到这个错误 未处理的异常 PlatformException null error 主机平台为非空返回值返回空值 null null 我已经更新了 yaml 中的所有 firebase 包 但仍然有此错误 E flutter 11230
  • Angular2 单选按钮在生产中不起作用

    我最近使用 Visual Studio 2015 和 MVC 构建了一个 angular2 应用程序 该项目还托管 WEBAPI 和 Angular 代码 我使用此处显示的说明将 MS Build 与 Angular build 集成htt
  • 无法解析在 iPhone 中获取数据的 Web 服务

    我是电话编程新手 使用下面的代码我得到网络服务的响应 NSString soapMessage NSString stringWithFormat n
  • 可定制的夏令时规则

    任务是什么 根据项目规范 我需要计算特定时区偏移的 DST 规则 规则cannot通过标准仪器应用 例如date default timezone set 因为我们不能依赖软件配置 并且如果某些 DST 规则发生更改 也无法更新它 我拥有的
  • Java:LinkedBlockingQueue是否考虑消费者的顺序?

    我有 3 个线程 2 个消费者 ConsumerA and ConsumerB and a Producer 我也有一个LinkedBlockingQueue queue At t 1 ConsumerA调用queue take At t
  • 我如何从 JMapViewer 世界地图中获取鼠标单击位置

    我正在使用地图浏览器 http wiki openstreetmap org wiki JMapViewerjar 在 JPanel 上显示世界地图 在地图上我添加MapMarkerDot s这是 GPS 点 问题是当我单击MapMarke
  • ASP.NET Web App 和 C# 应用程序之间的双向通信

    我需要构建一个可以双向通信的网站和应用程序 我将使用 ASP NET 构建网站 并使用 C 构建应用程序 我将自己托管该网站 它将与应用程序在同一台计算机上运行 我不知道在两者之间发送数据的最佳技术是什么 C 应用程序需要一直运行 我应该构
  • firebase多位置更新用户身份验证和数据库

    我有一个用于注册新用户的表格 其中包含电子邮件 密码 全名和电话号码 我可以用firebase auth createUserWithEmailAndPassword如果成功则创建新用户 然后我用firebase database ref
  • python 2和3中的UTF-8字符串

    以下代码适用于 Python 3 people u Nicholas Gyeney u Andr xe9 writers join people print writers print Writers format writers 并产生以
  • Gmp PHP 扩展 - MAMP PRO

    我查看了其他几个问题 例如this one https stackoverflow com questions 50435455 how to install gmp extension for php 7 2 using mamp on
  • Django 中 GROUP BY 中注释的聚合

    UPDATE 感谢发布的答案 我找到了一种更简单的方法来表述问题 原问题可以在修订历史中看到 问题 我正在尝试将 SQL 查询转换为 Django 但收到一个我不明白的错误 这是我的 Django 模型 class Title models
  • 如何使用dos批处理文件命令将日期设置为当前日期

    如何使用 dos 批处理文件命令将日期设置为当前日期 如果您需要在批处理文件中使用当前日期 则变量 date 有当前日期 echo date 23 02 2010 它使用您计算机的区域设置的格式 在我的电脑里是dd mm yyyy 自从 不
  • CMake 在 include_directories 中找不到正确的头文件/包含文件

    当我尝试编译时 我再次收到 架构 x86 64 的未定义符号 错误 我已经尝试了比这篇文章中实际记录的更多的内容 因为我已经忘记了我尝试过的所有内容 这是一个非常简单的设置should使用 CMake 很容易编译 当我对此运行 make 时