【发布时间】:2013-05-28 16:04:42
【问题描述】:
我已经编写了一个(并非如此)小型 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-compilation 和CMAKE output directory depending on generator architecture,但我不希望架构依赖于生成器。我希望它依赖于编译机。
例如,我在我的电脑中编写代码,然后编译它。如果一切顺利,我 ssh 到我的树莓派,通过 sshfs 将代码文件夹从我的电脑安装到树莓派,然后在那里编译。由于所有内容都转到不同的文件夹( armv6l 与 x86_64 ),因此没有冲突,我不必重新生成 makefile、清理或其他任何东西。
那么,基本上,是否可以告诉 cmake 让 makefile 架构感知? 谢谢
【问题讨论】:
标签: architecture makefile cmake output