【发布时间】:2017-10-24 16:38:41
【问题描述】:
我有一个 CMake 项目,用于生成支持多种 CPU 架构(arm64 和 armv7)的面向 iOS 的 XCode 项目。
我的 CMake 项目包含一些将 Lua 脚本转换为 C++ 源文件的命令(使用 add_custom_command 定义)。这些生成的 C++ 文件因架构而异(不应为 arm64 编译 armv7 文件,反之亦然)。
该工具的调用方式如下:
./data_tool --input <script> --output <C++ source> --architecture <armv7 or arm64>
我的(不正确的)CMake 文件目前看起来像这样:
foreach(ARCHITECTURE ${TARGET_ARCHITECTURES})
string(
REPLACE ".lua" ".cpp" GENERATED_CPP
${GENERATED_SOURCE_DIRECTORY}/${ARCHITECTURE}/${INPUT_SCRIPT}
)
add_custom_command(
OUTPUT ${GENERATED_CPP}
COMMAND ${DATA_TOOL} --input "${INPUT_SCRIPT}" --output "${GENERATED_CPP}" --architecture ${ARCHITECTURE}
MAIN_DEPENDENCY ${INPUT_SCRIPT}
)
list( APPEND GENERATED_SOURCE ${GENERATED_CPP} )
endforeach()
稍后,GENERATED_SOURCE 被附加到传递给add_executable 的源文件列表中。这段代码显然是错误的,因为 armv7 和 arm64 文件都是在为任一架构构建时编译的。
我如何告诉 CMake 每个架构编译一组不同的源文件?
【问题讨论】:
标签: xcode cmake generated-code