这是*nix和Windowsdefine的包含路径的正确方法吗?
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );
Run Code Online (Sandbox Code Playgroud)
请注意上面包含的尾随正斜杠.两个操作系统的包含/需要相同的正斜杠吗?
编辑(更新答案):
根据我的收集,下面的代码是为nix和Windows操作系统普遍定义include/require路径的正确方法.请在下面的评论中随意更正任何内容.
令我感到困惑的是我看到的许多例子显示替换back-slashes (\)为forward-slashes(/).根据以下一些答案,这是不必要的.
所以最终的正确代码(纯粹主义者)是:
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );
Run Code Online (Sandbox Code Playgroud)
该代码产生以下结果:
*nix: /path/to/the/file/
Windows: C:\Path To\the\file\
一个简短的解释,从内部(__FILE__)out(realpath())开始工作:
FILE文件的完整路径和文件名.始终包含已解析符号链接的绝对路径.
dirname()返回的字符串是删除了任何尾部/组件的路径.负责删除文件名.
realpath()成功返回规范化(标准化/标准化)绝对路径名.生成的路径将没有符号链接'/./'或'/../'组件.我认为这包括彻底性,因为__FILE__已经解决了符号链接.或者它可能包括解决相对路径?无论哪种方式,它似乎巩固了我们的目标.
在过去的几天里,我一直在强迫自己从Textmate切换到Vim.在大多数情况下,在经过一些繁重的Vim配置后,我的效率几乎相同.我的工作流程的一个方面我没有找到替代品是将文件拖放到Textmate中,其中图像将转换为img标签,文件将转换为require调用.
如何动态构建图像标记和include/require语句?
在 Ubunutu 12.04 或 Springdale 6.4 上,使用 gcc 和 g++,C_INCLUDE_PATH(或CPLUS_INCLUDE_PATH) 和LD_LIBRARY_PATH? 是LD一个只在运行时使用,另外两个只在编译时?
由于GCC 在这些操作系统上似乎忽略了INCLUDE和LIBRARY_PATH环境变量,我应该在构建我的 ~/.bashrc 文件时设置它以使其在现代 Linux 操作系统中尽可能可移植(实际路径中的模更改)?
在将OpenCV之类的库与C / C ++一起使用时,使用诸如OpenCV_LIBS之类的变量将编译器/链接器指向相关目录。
使用cmake的示例:
include_directories( ${OpenCV_INCLUDE_DIRS} )
target_link_libraries( project_name ${OpenCV_LIBS} )
Run Code Online (Sandbox Code Playgroud)
如何检查此类变量指向的位置?我尝试在终端输入set或输入printenv,但它仅显示一些系统变量。另外,如何设置/更改此类变量?
我正在尝试使用 x11 编译程序并使用 musl 作为 c 库。我的系统上仍然有 glibc。Musl 位于/usr/local/musl/includeThe glib headers are still in/usr/include
当我与
musl-gcc test.c
Run Code Online (Sandbox Code Playgroud)
我明白了fatal error: X11/Xlib.h: no such file or directory
如果我尝试
musl-gcc test.c -I/usr/include
Run Code Online (Sandbox Code Playgroud)
它包含 glib 标头而不是 musl 标头,并引发一堆错误。
如果我尝试
musl-gcc test.c -I/usr/local/musl/include -I/usr/include
Run Code Online (Sandbox Code Playgroud)
它仍然包含 /usr/include 中 glib 的标头
如何使 musl-gcc 使用 musl 标头,但仍包含 /usr/include 中的其他文件?
最近有人建议我作为包管理器查看 conda。不幸的是,我没有成功地找到如何让我的编译器找到与 conda 安装的仅标头库?理想情况下,我希望根本不必手动指定编译器的路径。
(上下文是我来自 macOS 上的自制软件,它会在正确的位置创建符号链接。显然这是 conda 避免的。但是,如果有一种简单的方法来编译简单的示例就好了!)
例如,如果我的代码是下面的代码。注意:这个问题是通用的,与特定的包无关,我也不想再次手动指定我的特定虚拟环境。
#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>
int main()
{
xt::xarray<double> a
{{1.0, 2.0, 3.0},
{2.0, 5.0, 7.0},
{2.0, 5.0, 7.0}};
std::cout << a;
}
Run Code Online (Sandbox Code Playgroud)
我已经使用“安装”了该库
conda create --name example
source activate example
conda install -c conda-forge xtensor-python
Run Code Online (Sandbox Code Playgroud)
现在我想编译
clang++ -std=c++14 test.cpp
Run Code Online (Sandbox Code Playgroud)
请注意,我知道这是有效的:
clang++ -std=c++14 -I~/miniconda3/envs/example/include test.cpp
Run Code Online (Sandbox Code Playgroud)
但我认为这不是我们想要的,因为:
example)。我熟悉添加-v到 Clang 编译命令行以查看包含搜索路径顺序的技巧,但这只是显示正在搜索哪些目录。它没有显示为什么要搜索这些目录。
是否有一些选项可以打印有关包含搜索路径设置来自何处的详细信息?(例如,命令行选项、环境、编译设置等)——任何能够提供有关它们为何按顺序排列的更多信息的设置也将受到赞赏。
请注意,我并不想知道特定的包含文件来自哪里(例如,您可以使用-M或获得的信息-H),我感兴趣的是编译器为什么要搜索特定的包含路径。
背景:我们正在尝试调试为什么特定路径 (/usr/local/include) 在特定平台 (Mac 10.14) 的搜索目录列表中出现“太高”。我们认为我们的构建系统没有明确请求它,因此更多地了解它的来源将有助于我们弄清楚发生了什么。
我正在我的 Qt 创建器中创建两个 C++ 项目。第一个是 an Application project,另一个是unit-test project。这两个项目分别运行良好。然而,当将两者联系在一起时,我遇到了一些问题。
我将其包含#INCLUDEPATH applicationProjectPath在. 然后从应用程序项目中。然后,创建一个from并调用该对象内的函数。.pro fileunit-test project#include myClassmain.cppunit-test projectmyObjectmyClass
编译的时候出现这个错误:
undefined reference to `myObject::function'
Run Code Online (Sandbox Code Playgroud)
但是,当添加#SOURCES applicationProjectPath/myClass.cpp到单元测试项目的 .pro 文件时(同时保留#INCLUDEPATH applicationProjectPath),一切正常(即:测试单元被执行)
#INCLUDEPATH当从 .pro 中删除 时,它再次崩溃。
我想如果我包含了#SOURCES,那么我就不需要包含#INCLUDEPATH. 如果我包含#INCLUDEPATH,我不应该包含#SOURCES(至少不包含完整路径,只是 .cpp 文件,然后编译器应该查找两个目录,默认目录和添加目录)。
所以,我的问题是:为什么会发生这种情况
嗨我有一个嵌入式C项目,所有基本C库都存储在外部文件夹中(不在工作区中).我可以编译因为编译器知道在哪里查找这些文件,但Eclipse不知道这些文件存在并且我收到错误消息:

我可以手动添加一个文件夹: rightClickOnProject->Properties->C/C++ Include Paths and
Symbols -> Add External Include Path
例如,文件<stdint.h>位于文件夹中,C:\embARM7\yagarto\arm-elf\include因此我执行以下操作:

这解决了日食错误标记 <stdint.h>
但是文件<stdio.h>位于文件夹中C:\embARM7\yagarto\arm-elf\include\sys,我必须再次完成整个过程:

现在下一个头文件位于C:\embARM7\yagarto\arm-elf\include\machine,依此类推......
我的问题是:有没有办法添加包含所有子文件夹的外部包含路径?有点"添加此文件夹和所有子文件夹"/"递归添加此文件夹".就像C:\embARM7\yagarto\arm-elf\include\*这样我不必手动添加文件夹结构中的每个文件夹.对于一个项目,这是5分钟,但我必须为10个项目做这个,这项工作很糟糕.
谢谢
目前我正在使用 Windows 机器,并且想尝试用于 linux(wsl) 的 Windows 子系统进行 C++ 开发。Visual Studio Code(VSC) 提供了一个简洁的扩展,用于处理运行良好的子系统。我还无法开始工作的一件事是让 vsc 包含位于子系统内部的头文件。
\n\n我知道我可以手动添加新路径以包含在 \xc2\xb4c_cpp_properties.json\xc2\xb4 中,但我不知道从 Windows 指向子系统 /usr/include 的任何路径(作为示例)。我找到了一些资源(wsl include paths),但无论如何都无法让它工作。我还尝试按照 gitlab 问题中的描述自行生成路径,但这也没有帮助。
\n\n有人有一些为 C++ 项目使用 wsl 设置 vsc 的经验吗?谁能帮助我?
\nc++ include-path visual-studio-code windows-subsystem-for-linux vscode-remote
include-path ×10
c++ ×6
c ×2
clang++ ×1
cmake ×1
conda ×1
eclipse-cdt ×1
gcc ×1
image ×1
include ×1
library-path ×1
linux ×1
musl ×1
opencv ×1
php ×1
qt ×1
qt-creator ×1
unit-testing ×1
unix ×1
vim ×1
windows ×1
windows-subsystem-for-linux ×1
xtensor ×1