我编写了一个(不是那么)小的 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 进行交叉编译和CMAKE 输出目录,但我不希望架构依赖于生成器。我希望它依赖于编译机。
例如,我在我的电脑上编码,然后编译它。如果一切顺利,我 ssh 到我的树莓派,通过 sshfs 将代码文件夹从我的电脑安装到树莓派,然后在那里编译。由于所有内容都转到不同的文件夹( armv6l 与 x86_64 ),因此没有冲突,我不必重新生成 makefile、清理或其他任何东西。
那么,基本上,是否有可能告诉 cmake 让 makefile 架构感知?谢谢