c – 如何使用CMAKE为交叉编译配置设置特定的CMAKE_C_OUTPUT_EXT
发布时间:2020-12-16 07:23:47 所属栏目:百科 来源:网络整理
导读:我正在尝试使用CMake 3.12.0版本设置工具链文件以进行交叉编译. 我的目标文件与Windows上的.obj和UNIX中的.o不同. 因此,我将CMAKE_LANG_OUTPUT_EXTENSION设置为.src. 不幸的是,这些变量被这些行中的CMakeCInformation.cmake文件覆盖: # some compilers use
我正在尝试使用CMake 3.12.0版本设置工具链文件以进行交叉编译.
我的目标文件与Windows上的.obj和UNIX中的.o不同. 因此,我将CMAKE_LANG_OUTPUT_EXTENSION设置为.src. 不幸的是,这些变量被这些行中的CMakeCInformation.cmake文件覆盖: # some compilers use different extensions (e.g. sdcc uses .rel) # so set the extension here first so it can be overridden by the compiler specific file if(UNIX) set(CMAKE_C_OUTPUT_EXTENSION .o) else() set(CMAKE_C_OUTPUT_EXTENSION .obj) endif() 如果我评论这些行,我的配置将起作用,并将使用正确的对象扩展. 我认为我的工具链文件已配置好,以便CMake不会执行其内部编译器检查. 这是我的工具链文件输入行的外观: SET(CMAKE_SYSTEM_NAME Generic) INCLUDE(CMakeForceCompiler) SET(CMAKE_C_COMPILER_FORCED TRUE) SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) #other compiler configuration lines here SET(CMAKE_C_OUTPUT_EXTENSION .src) SET(CMAKE_ASM_OUTPUT_EXTENSION .o) SET(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1) SET(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1) 我知道CMakeForceCompiler已经过折旧,应该使用CMAKE_TRY_COMPILE_TARGET_TYPE,这就是为什么两者都存在的原因. 我正在使用-DCMAKE_TOOLCHAIN_FILE告诉CMake我的工具链文件 你能帮我弄清楚我做错了什么吗? 编辑:我也试图CACHE CMAKE_C_OUTPUT_EXTENSION的值.至少对我来说这没用. 解决方法
你没有做错任何事.在项目命令不在工具链文件中之后,在CMakeLists.txt文件中添加SET(CMAKE_C_OUTPUT_EXTENSION .src).这应该可以获得所需的行为(因为它应该覆盖CMakeCInformation和任何其他模块脚本设置的值).这可能是对使用工具链文件和CMakeCInformation时的疏忽,它可能不应该覆盖工具链值.您应该访问CMake网站并提交错误报告.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |