我有一些库/应用程序(由第三方供应商提供,因此更改它们并非真正的选项)以非标准方式构建。基本上,有些库以奇怪的方式链接到其他库。
这就是我所说的:
.
├── libA
│ ├── include
│ │ └── headerA.h
│ └── src
└── libB
├── include
│ └── headerB.h
└── src
libA
使用libB
语法包含""
标头,即传递#include "headerB.h
"
和-I
编译选项以包含libB/include/
目录。但是,链接到libA
会产生问题,因为我还需要包含libB
包含目录。
这不是一个大问题,因为标头已安装到目标sysroot中。假设libB
标题已安装到${SYSROOT}/usr/include/libB
中。
现在,出于某种原因,使用${CMAKE_C_FLAGS}
而不是${CMAKE_SYSROOT}
传递sysroot目录。我尝试解析${CMAKE_C_FLAGS}
以获得这样的sysroot:
execute_process(COMMAND "echo \"${CMAKE_C_FLAGS}\""
COMMAND "grep -Eo '\\-\\-sysroot=\\S*'"
COMMAND "sed 's:--sysroot=::g'"
OUTPUT_VARIABLE SYSROOT
RESULT_VARIABLE SYSROOT_RESULT
)
但是,"No such file or directory"
总是失败。我认为它没有一个命令,即echo
,grep
或sed
。我该如何解决?或者可能有一个更好的方式?