gpt4 book ai didi

architecture - cmake - 创建架构感知 makefile

转载 作者:行者123 更新时间:2023-12-05 06:46:19 26 4
gpt4 key购买 nike

我已经编写了一个(不是这样的)小型 bash 脚本来生成我的通用 makefile。这些 makefile 在开始时检测主机体系结构,并在以 arch 为名称的文件夹中创建所有对象和输出。

它是这样的:

uname_m = $(shell uname -m)
DETECTED_ARCHITECTURE=$(uname_m)
ifeq ($(ARCH), x86_64)
CFLAGS += -m64
LDFLAGS += -m64
endif
ifeq ($(ARCH), x86)
CFLAGS += -m32
LDFLAGS += -m32
endif
OUTPUT_DIR = $(DETECTED_ARCHITECTURE)/
OBJ_PREFIX_DIR = $(OUTPUT_DIR)objs/

例如,如果我在我的工作电脑上为我的代码运行 make,它会将所有内容输出到一个名为 i686 的文件夹,在家里输出到一个文件夹 x86_64,在我的树莓派上输出到 armv6l。此外,如果我执行类似 ARCH=i686 make 的操作,它会正确覆盖检测到的体系结构,以便它设置正确的编译器选项和输出目录。最终输出进入 OUTPUT_DIR,所有生成的 .o 文件进入 OUTPUT_DIR/objs。

我正在尝试用 cmake 做一些类似的事情。我看过 CMake add_custom_command/_target in different directories for cross-compilationCMAKE output directory depending on generator architecture ,但我不希望架构依赖于生成器。我希望它依赖于编译机器。

例如,我在我的电脑上编写代码,然后编译它。如果一切顺利,我会通过 ssh 连接到我的树莓派,通过 sshfs 将代码文件夹从我的电脑挂载到树莓派,然后在那里进行编译。由于所有内容都转到不同的文件夹( armv6l 与 x86_64 ),因此没有冲突,而且我不必重新生成 makefile、清理或其他任何内容。

那么,基本上,是否可以告诉 cmake 使 makefile 架构感知?谢谢

最佳答案

这摘自以下电子邮件主题:Determine-32-vs-64-bit-cpu

if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
set(arch_64 TRUE)
else()
set(arch_64 FALSE)
endif()

并给出了以下警告

However, remember that on Mac OS X this is almost always the wrong thing to do when you're building universal binaries. So, if your software is supposed to work on Mac, you will need to take special precautions.

我已经成功地使用了这个方法。

如果您不担心 Mac,这应该适合您。如果您担心 Mac,您需要检查您是否在 Mac 上并使用“fat”二进制标志而不是 64 vs 32 标志。

编辑

这里给出了更好的答案:https://stackoverflow.com/a/12024211/1399279 .

具体来说,请在此处查看他对此的 CMake 实现:https://github.com/petroules/solar-cmake/blob/master/TargetArch.cmake

关于architecture - cmake - 创建架构感知 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16796629/

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