为何try_compile与try_run处理错误源码时表现异常?
MUSL检测代码在CMake中失效问题
我编写了两段用于检测MUSL的C代码:一段在非MUSL环境下会生成无法编译的代码,另一段采用正常语法编写。但无论使用哪段代码,在Ubuntu(glibc)和Alpine(musl)环境中,通过check_c_source_runs、try_compile、try_run得到的变量结果完全一致,无法区分两种libc环境。
含错误分支的检测C代码
set(is_musl_src [=[ #include <stdlib.h> #ifndef _GNU_SOURCE #define _GNU_SOURCE #include <features.h> #ifndef __USE_GNU #define __MUSL__ #endif #else #include <features.h> #ifndef __USE_GNU #define __MUSL__ #endif #endif #ifdef __MUSL__ int main(void) { return EXIT_SUCCESS; #else #include "noottt.h" $$#@ 4 5%905i035 35 45 34%^5 #endif } ]=])
正常语法的检测C代码
int main(void) { #ifdef __MUSL__ return EXIT_SUCCESS; #else return EXIT_FAILURE; #endif }
测试用CMake代码
check_c_source_runs("${is_musl_src}" IS_MUSL) try_compile(COMPILE_RESULT_VAR0 SOURCE_FROM_VAR is_musl.c is_musl_src C_STANDARD 90 ) try_run(RESULT_VAR COMPILE_RESULT_VAR1 SOURCE_FROM_VAR is_musl.c "${is_musl_src}" C_STANDARD 90 ) try_run(RESULT_VAR COMPILE_RESULT_VAR2 SOURCE_FROM_VAR is_musl.c is_musl_src C_STANDARD 90 ) message(STATUS "IS_MUSL = ${IS_MUSL}") message(STATUS "RESULT_VAR = ${RESULT_VAR}") message(STATUS "COMPILE_RESULT_VAR0 = ${COMPILE_RESULT_VAR0}") message(STATUS "COMPILE_RESULT_VAR1 = ${COMPILE_RESULT_VAR1}") message(STATUS "COMPILE_RESULT_VAR2 = ${COMPILE_RESULT_VAR2}")
内容的提问来源于stack exchange,提问作者Samuel Marks
相关产品推荐
相关产品推荐

