构建系统经常有单独的构建和安装步骤。有时,已安装的版本将在操作系统上安装较旧的标头,并且可能会拾取这些标头而不是源代码中的标头。这可能会导致源代码中非常微妙和奇怪的行为难以诊断,因为代码看起来像是做了一件事而二进制做了另一件事。
特别是,我的小组使用CMake和C ++,但这个问题也更广泛地相关。
是否有很好的技巧可以防止在构建中拾取旧标头?
答案 0 :(得分:1)
在黑客开发版本时从CMAKE_INSTALL_PREFIX
卸载软件包。
使用自定义位置来安装目标,不要添加自定义安装前缀来构建。
-I
选项
编译器和大量<PACKAGE>_ROOT
到cmake配置步骤。使用标题搜索优先级。请参阅include_directories命令和
AFTER
/ BEFORE
子选项。
find_package
/ add_subdirectory
,有时它不是一项微不足道的任务
命令,容易出错,自动测试未检测到错误。冲突不仅可以在构建/安装目录之间发生,还可以发生
在安装目录本身。例如版本1.0
安装:A.hpp
和B.hpp
,
版本2.0
安装:A.hpp
。如果您按顺序安装1.0
和2.0
目标
本地不会检测到一些#include<B.hpp>
错误。这种错误很容易
通过自动测试检测到(CI服务器的干净环境不具有B.hpp
版本中的旧1.0
文件)。卸载命令也很有帮助。
答案 1 :(得分:0)