我有一个使用 CMake 构建的简单 C++ 应用程序。通过执行以下操作,可以允许在崩溃时转储核心:
add_custom_command(TARGET target POST_BUILD
COMMAND /usr/libexec/PlistBuddy -c "Add :com.apple.security.get-task-allow bool true" coredump.entitlements
COMMAND codesign -s - -f --entitlements coredump.entitlements $<TARGET_FILE:target>
COMMAND rm -f coredump.entitlements
VERBATIM)
这适用于构建的程序(例如,以
./build/bin/target
运行),但在make install
之后,程序无法启动,错误:Killed: 9
如何在 CMake 安装后再次执行协同设计步骤,或者通过
make install
使初始签名持久化?
感谢@Osyotr 为我指明了正确的方向。我最终得到以下结果:
set(ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mytarget.entitlements")
install(CODE "execute_process(COMMAND
codesign -s - -f --entitlements \"${ENTITLEMENTS}\" \"${CMAKE_INSTALL_PREFIX}/bin/mytarget\"
)" COMPONENT Runtime)