在一个CMake项目中,偶尔需要配置另一个CMake项目。这通常使用
ExternalProject_Add
来完成。这样做有两个主要原因。一种是构建一个单独的包并提供给项目,另一种是使用不同的工具链。在前一种情况下,必须小心地将 CMAKE_C_COMPILER
和其他变量转发到外部项目,因为编译器通常应该是相同的。在后一种情况下,通常会省略这些变量或将它们显式指定为其他变量。但是,环境变量(例如CFLAGS
)只是简单地转发,并且被调用的工具链可能无法理解为包装项目传递的编译器标志。遇到这种情况该如何正确处理呢?通过环境传递编译器标志是很常见的事情。 “别那样做。”在这里不是一个有用的答案。我们不会凭一厢情愿神奇地改变人们调用 CMake 的方式。 ExternalProject_Add
应如何参数化,以便 CFLAGS
环境变量不会被结转?
一种碰巧有效但不一定是理想解决方案的方法是将标志显式传递给
ExternalProject_Add
:
"-DCMAKE_C_FLAGS=$ENV{CFLAGS_FOR_BUILD} $ENV{CPPFLAGS_FOR_BUILD}"
"-DCMAKE_CXX_FLAGS=$ENV{CXXFLAGS_FOR_BUILD} $ENV{CPPFLAGS_FOR_BUILD}"
请在提供更好的答案后否决此答案。