问题标签 [header-only]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何强制我的 INTERFACE 库上的依赖项使用 C++11 或更高版本?
我正在将我的库拆分为仅标头库和已编译库,因此,我第一次尝试使用 CMake 来“构建”,或者更确切地说,公开仅标头库图书馆。
阅读此文档和 CMake 文档,我知道我需要使用没有源的 INTERFACE 库。但是 - 我的头文件必须使用至少 C++11 的 C++ 语言标准版本进行编译。当我实际编译一些东西时,我做了:
但那是:
- 不完全是我需要使用仅标头库的代码 - 我需要说“至少 C++11”。
- 不能用于 INTERFACE 库。
我注意到没有set_property(... INTERFACE)
. 那么我应该如何强制依赖代码使用 C++11 或更高版本?
编辑:我对在依赖项中限制确切的C++ 版本选择的答案和限制“至少”的答案都感兴趣——以防后者有问题/困难/不可能。
c++ - c++11中的constexpr模板元信息变量
我试图以结构化的方式(即使用类)表示一些元信息。它只是标题,我需要支持 c++11,所以不能使用内联变量。我提出了几个潜在的解决方案,但每个都有其缺点。任何建议都将不胜感激,尽管只是指出如何使“替代 B”编译对我来说是一个很好的解决方案。
SthInfo::fieldA
用作模板的参数,Processor<Type>::work(field)
其中:
- 检查“容器类型”是否与该处理器匹配
- 并将 ID 与其他不相关的参数一起使用做一些内部逻辑
备选方案 A - 有效但模板化的 ID
这在 Linux 和 Windows 上可以正常工作(编译和链接)。但是,有没有办法避免ID
模板中的常量并将其作为FieldInfo
类中的字段?还有其他改进的想法吗?
备选方案 B - 损坏 - 不会链接
我尝试更改为以下代码,但它没有在 Linux 上链接(但在 Windows 上...)undefined reference to SthInfo::fieldA
:
替代 C - constexpr 函数 - 不太好用。
更改SthInfo::fieldA
为 constexpr 函数会有所帮助,但是()
在应用程序代码中使用时必须使用...
c++ - 我可以隐藏第三方头文件中的定义吗?
我正在编写一个仅使用头文件的库,仅使用 .hpp 和 .ipp 文件。有时我必须#include 一些标准库。
但是 IDE 解析所有内容并向用户显示建议会变得很昂贵。我不想拆分我的定义和实现,因为我正在尝试编写一个仅包含标头的库。
我无法找到一个明智的解决方案来克服这个问题。对于这种情况,有没有实用的方法可以遵循?
提前致谢。
c++ - 使用 cmake 将 Eigen 库添加到 c++ 项目
不幸的是,我在 Ubuntu 18.04.4 LTS 系统上使用 Cmake将只有Eigen 3.3.7 库的标头添加到我的 Makefile 时遇到了一些问题。我可以使用库编译我的代码,只需复制包含目录中的库文件夹并
include_directories(./include/eigen3)
在 CMakeLists.txt 文件中使用。但是,我更希望不对库路径进行硬编码,而是能够在 CMakeLists.txt 文件中动态设置它,以便更轻松地与其他人共享项目。不幸的是,我找到的所有说明都没有对我有用。
我准备了以下最小代码示例:
主.cpp:
CMakeLists.txt:
我只下载了标题Eigen 3.3.7 Library并将文件夹重命名为 eigen3。然后将该文件夹移动到:
/usr/local/share/eigen3
当我运行时,cmake CMakeLists.txt
我收到以下错误:
当我检查 Eigen 库文件夹时,我意识到/usr/local/share/eigen3/cmake
它只包含一个名为 Eigen3Config.cmake.in 的文件,而不是必需的 Eigen3Config.cmake。为什么会这样?
我尝试将文件重命名为 Eigen3Config.cmake。这里的错误如下:
此外,我还尝试了解释stackoverflow 的解决方案:CMake find_package not working for Eigen? 没有成功。
我怎样才能使它正常工作?另外我认为我还不太了解底层系统。任何解释将不胜感激。
c++ - 创建可以通过 add_subdirectory 包含的仅标头库
我正在为 C++20 中的协程创建一个轻量级的仅包含标头的库,称为 Conduit。库的结构是这样的,除了 C++ 标准库之外没有其他依赖:
问题:如何为我的库编写 CMakeLists.txt 文件,以便其他项目可以通过将其添加为子目录来使用 Conduit add_subdirectory
?
虽然导管确实提供了安装选项,但人们使用导管的预期方式是将其作为子目录添加到他们的项目中。在 example_project 的 CMakeLists.txt 文件夹内,会有一行add_subdirectory(conduit)
,目录结构example_project
如下所示:
到目前为止我所拥有的:这是我目前用作管道的 CMakeLists.txt 文件的内容。它使用各种不同的测试编译和运行 tests.cpp,但是当我将管道作为子目录添加到另一个项目时(通过add_subdirectory
CMakeLists.txt 中的 git submodule +),CMake 不会将管道/包含/添加到列表中的包含文件。
c++ - 将库链接到仅标题的库
我有两个库:
a
;b
: 一个仅头文件的库,它依赖于a
.
我不确定是否可以链接b
到a
. 如果是这样,我该怎么做?
事实上,我有一个c
依赖于两者的第三个库。此 CMake 脚本不起作用:
我通过将源文件添加a
到c
.
c++11 - 多重定义错误(collect2:error:ld returned 1 exit status)
我使用https://github.com/jdduke/three_cpp作为仅标头模式,但在使用我的项目编译时遇到了一些问题。
当我在多个 C++ 文件中包含以下matrix4.hpp 标头(仅包含必要部分)时,会出现此问题
三/core/matrix4.hpp(删除不需要的部分)
三/core/impl/matrix4.ipp(删除不需要的部分)
当从多个 C++ 文件中包含三个/core/matrix4.hpp 时,生成多个定义错误
因此,根据我们的试验,我们注意到THREE_DECL
matrix4.hpp 中的以下函数未提及
Vector3 getColumnX() const;
Vector3 getColumnY() const;
Vector3 getColumnZ() const;
Matrix4& setPosition( const Vector3& v );
因此,在修改这些功能后,如下错误已修复
THREE_DECL Vector3 getColumnX() const;
THREE_DECL Vector3 getColumnY() const;
THREE_DECL Vector3 getColumnZ() const;
THREE_DECL Matrix4& setPosition( const Vector3& v );
基于三个/config.hpp在使用仅标头版本的情况下THREE_DECL
定义为inline
.
我不明白的是
- 为什么即使在不同的编译单元中包含相同的头文件,也会出现多个定义错误?
- 添加
THREE_DECL
对于解决这些问题的意义是什么?
任何帮助将不胜感激。
c++ - 如何为 CMake 指定仅限标头的 boost 库?
我正在使用以下 cmake 文件
在 CMake 配置阶段它写
这证明它boost
在/opt/boost
.
不幸的是,在编译期间它说它找不到包含文件
虽然,文件在那里
boost
那么,如何CMake
正确配置呢?
c++ - CMAKE 对上游 C++ Header-only 库的依赖
我有一个相对简单的仅包含标头的 C++ 库,其结构如下
该库本身位于项目的根目录中,然后app1
添加。我的意图是使用仅标头库作为引用包含目录和链接依赖项的目标。
这是根CMakeLists.txt
文件:
和CMakeLists.txt
应用程序的文件:
由于app1
是下游,myLib
我认为我可以添加myLib
到应用程序的链接库中,它会自动配置所有内容。这不起作用,并且app
看不到.myLib
任何想法如何解决这个问题,或者如果方法一开始就错误的解释?
谢谢
c++ - 如何为 CMake 中的仅标头库为内部和外部#includes 创建不同的 target_include_directories?
我的仅标头库的目录结构如下:
基本上我希望能够在 file1.h 中执行以下操作(因此在项目中的任何位置):
但必须在任何外部项目中执行以下操作:
目前,我的天真实现是在 CMakeLists.txt 中:
允许内部和外部文件都可以做到。然而,这还不够严格,我正在寻找的是与此等效的东西:
但这显然会导致 CMake 错误,因为:
有可能做我想做的事吗?预先感谢您的帮助。