Cmake:更改多个项目的编译器?

ehxuflar  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(100)

问题是

我想更新多个C++项目的编译器。我想尽我所能让它自动化。
结构为:

-Folder 1
 - CmakeList.txt
-Folder 2
 - CmakeList.txt
-Folder 3
 - CmakeList.txt

字符串
我有几十个项目需要更新,因为LTO约束(静态库)和原始语言更新。而且用手做是件苦差事。Cmake指向Ninja。
我希望项目和静态库保持独立,在自己的目录,像上面的结构。

Cmake摘录

project(${APP_NAME} LANGUAGES CXX)
add_library(${APP_NAME} STATIC ${SOURCES})

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_CONFIGURATION_TYPES "Debug" "Release")

set(CMAKE_EXE_LINKER_FLAGS -fuse-ld=mold)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)

第一种解决方案:

创建一个脚本,模仿我的IDE的功能,并将其应用于每个文件夹。这可能是一个可行的解决方案,但我发现它容易出错。

第二种解决方案:

也许在根上有一个驱动cmake,并将其他cmake视为单独的subs?using Cmake subdirectories
我不知道该怎么办,但听起来可能会有帮助。我可以在父级中设置编译器和其他常见定义(如C++/Cmake最小版本),然后只在IDE中重新加载该文件,让Cmake做所有的脏工作?是这样吗?

第三种方案:

创建一个脚本来替换文本文件(在Cmake缓存中..)中对编译器和归档器的引用等。=>

提问

不知道什么是最好的-头痛免费?- 方法是。现在,使用更新的编译器重新加载所有库的最佳Cmake方法是什么?从那时起,我已经有了我的脚本,在所有的库上调用忍者。

qnzebej0

qnzebej01#

(有争议的解决方案)显然,
设置set(CMAKE_CXX_COMPILER /usr/bin/your_compiler CACHE PATH "" FORCE)使能做我想做的事情。
同样,我需要在Cmake生成阶段控制编译器,因为我有一些稍后调用Ninja的脚本。使用不同的编译器集合,我的LTO构建就变得一团糟。我想清理这个烂摊子,而不需要太手动的过程。
这不是我理解的推荐方式;但我还是要让它发挥作用

相关问题