【问题标题】:make file not able to open header使文件无法打开标题
【发布时间】:2016-02-09 09:05:00
【问题描述】:

我正在使用 make 编译一个 C/C++ 项目。但是,编译过程失败并出现以下错误消息 -** Compiling lib/crypto/rsaCipher.c C:/Davidviewservermain\sysimg-ufa\bora\vmacore-for-ufa-src\bora\lib\crypto\rsaCi pher.c(15) : 致命错误 C1083: 无法打开包含文件: 'openssl/rsa.h': No su ch 文件或目录,我看到 rsaCipher.c 是包含 rsa.h 文件的哈希。但是,即使它存在于 openssl 文件夹中,make 过程也无法打开头文件。 make 过程如何找到头文件的位置?他们是否有任何环境变量,例如 INCLUDE,以提供将由 make 过程检查的所有头文件的搜索路径。我在 windows 中使用 make。

【问题讨论】:

  • C:/Davidviewservermain\sysimg-ufa\bora\vmacore-for-ufa-src\bora\lib\crypto\rsaCipher.c(15):致命错误 C1083:无法打开包含文件:' openssl/rsa.h': 没有这样的文件或目录
  • 以上是完整的错误信息
  • 这是一个多么尴尬的“问题”?拥有超过 800 名代表,您应该知道如何发布有效问题和minimal reproducible example。至少分别显示你的makefile,CMakeLists.txt。
  • @πάνταῥεῖ 奇怪的是人们对这个废话投了赞成票。
  • @juanchopanza 是的,我们应该要求他们给出解释性评论 ;-) ...

标签: c++ c cmake makefile


【解决方案1】:

make 进程如何找到头文件的位置?

它没有,也不需要。 编译器*需要找到它们,它是通过在配置包含搜索路径时告诉它在哪里查找来实现的。

他们是否有任何环境变量,例如 INCLUDE,以提供将由 make 过程检查的所有头文件的搜索路径。

这是基于编译器,而不是make。如果您的编译器检查包含搜索路径的任何环境变量,那么您可以在运行 make 之前设置它。

不过,通常您会在 Makefile 中设置一个变量,然后在编译规则中使用该变量:

INC=-I/usr/informix/incl/c++ /opt/informix/incl/public

main:   test.cpp
        gcc -Wall $(LIB) $(INC) -c test.cpp

请注意,上面向您展示了如何将包含路径放在编译命令中,但它没有展示最佳实践:依赖关系不正确,因此 make 并不总是知道它需要在应该重建目标时。我没有详细查看它,但this 问答可能会帮助您生成强大的 makefile。

* 确实是预处理器,但是使用现代工具链,它嵌入在编译器可执行文件中或由编译器驱动程序自动调用。

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多