我正在尝试使用 CMake 3.12.0 版本设置用于交叉编译的工具链文件。
我的目标文件具有与.obj
Windows 和.o
UNIX 不同的扩展名。
因此,我将我的设置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
应该使用,这就是为什么两者都在那里。
我告诉 CMake 我的工具链文件使用-DCMAKE_TOOLCHAIN_FILE
你能帮我弄清楚我做错了什么吗?
编辑:我也在尝试CACHE
. CMAKE_C_OUTPUT_EXTENSION
至少对我来说这不起作用。