gpt4 book ai didi

cmake - CMake:如何更改单个目标的编译器

转载 作者:行者123 更新时间:2023-12-03 20:57:26 29 4
gpt4 key购买 nike

我已经使用交叉编译器嵌入了项目。我想介绍使用本地GCC编译器编译的Google测试。另外,使用CTC编译器构建一些单元测试目标。

简要地:
我有3个不同的目标,并用3个不同的编译器进行编译。如何在CMakeLists.txt中表达它?我试过SET_TARGET_PROPERTIES;
但是用此命令设置CXX variable似乎是不可能的!

最佳答案

我现在只是遇到了同样的问题,但是其他答案并没有帮助我。我也在交叉编译,我需要使用GCC编译一些实用程序,但是我的核心代码需要使用avr-gcc编译。

基本上,如果您有CMakeLists.txt,并且希望使用另一个编译器来编译此文件中的所有目标,则只需手动设置变量即可。

在某处定义这些宏:

macro(use_host_compiler)
if (${CURRENT_COMPILER} STREQUAL "NATIVE")
# Save current native flags
set(NATIVE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "GCC flags for the native compiler." FORCE)

# Change compiler
set(CMAKE_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME})
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
set(CMAKE_C_COMPILER ${HOST_C_COMPILER})
set(CMAKE_C_FLAGS ${HOST_C_FLAGS})
set(CURRENT_COMPILER "HOST" CACHE STRING "Which compiler we are using." FORCE)
endif()
endmacro()


macro(use_native_compiler)
if (CMAKE_CROSSCOMPILING AND ${CURRENT_COMPILER} STREQUAL "HOST")
# Save current host flags
set(HOST_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "GCC flags for the host compiler." FORCE)

# Change compiler
set(CMAKE_SYSTEM_NAME ${NATIVE_SYSTEM_NAME})
set(CMAKE_SYSTEM_PROCESSOR ${NATIVE_SYSTEM_PROCESSOR})
set(CMAKE_C_COMPILER ${NATIVE_C_COMPILER})
set(CMAKE_C_FLAGS ${NATIVE_C_FLAGS})
set(CURRENT_COMPILER "NATIVE" CACHE STRING "Which compiler we are using." FORCE)
endif()
endmacro()


在CMakeLists.txt脚本的最开始(或在工具链文件中),根据需要设置以下变量:


CURRENT_COMPILER
HOST_C_COMPILER
HOST_C_FLAGS
NATIVE_SYSTEM_NAME
NATIVE_C_COMPILER
NATIVE_C_FLAGS


这个想法是 CMAKE_C_COMPILER(和公司)是一个与其他变量一样的变量,因此将其设置在某个范围内只会使其在该范围内更改。



用法示例:

use_host_compiler()
add_executable(foo foo.c) # Compiled with your host (computer)'s compiler.
use_native_compiler()
add_executable(bar bar.c) # Compiled with your native compiler (e.g. `avr-gcc`).

关于cmake - CMake:如何更改单个目标的编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168094/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com