问题是
我想更新多个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方法是什么?从那时起,我已经有了我的脚本,在所有的库上调用忍者。
1条答案
按热度按时间qnzebej01#
(有争议的解决方案)显然,
设置
set(CMAKE_CXX_COMPILER /usr/bin/your_compiler CACHE PATH "" FORCE)
使能做我想做的事情。同样,我需要在Cmake生成阶段控制编译器,因为我有一些稍后调用Ninja的脚本。使用不同的编译器集合,我的LTO构建就变得一团糟。我想清理这个烂摊子,而不需要太手动的过程。
这不是我理解的推荐方式;但我还是要让它发挥作用