在为 CMake 预编译头生成的源文件上应用“set_property”,无需硬编码 PCH 路径
我正在使用 CMake 的 target_precompile_headers
从我正在参与的项目中的 PCH.hpp
文件生成预编译头。
我需要确保生成的源文件与项目中的其他源文件具有完全相同的编译和警告标志,以避免 -Winvalid-pch
问题。
目前,我正在这样做:
target_precompile_headers(sfml-system PRIVATE "${CMAKE_SOURCE_DIR}/src/SFML/PCH.hpp")
set_property(SOURCE "${CMAKE_BINARY_DIR}/src/SFML/System/CMakeFiles/sfml-system.dir/cmake_pch.hxx.cxx"
APPEND_STRING PROPERTY COMPILE_FLAGS " ${WARNINGS}")
但是,必须对生成的 cmake_pch.hxx.cxx
文件的路径进行硬编码似乎很脆弱,可能不可移植,并且是维护负担。
有什么方法可以检索 cmake_pch.hxx.cxx
文件的路径而不对其进行硬编码吗?
I am using CMake's target_precompile_headers
to generate a precompiled header from a PCH.hpp
file in a project I'm contributing to.
I need to ensure that the resultant generated source file has the exact same compilation and warning flags as the other source files in my project, to avoid -Winvalid-pch
issues.
At the moment, I am doing this:
target_precompile_headers(sfml-system PRIVATE "${CMAKE_SOURCE_DIR}/src/SFML/PCH.hpp")
set_property(SOURCE "${CMAKE_BINARY_DIR}/src/SFML/System/CMakeFiles/sfml-system.dir/cmake_pch.hxx.cxx"
APPEND_STRING PROPERTY COMPILE_FLAGS " ${WARNINGS}")
However, having to hardcode the path to the generated cmake_pch.hxx.cxx
file seems brittle, potentially non-portable, and a maintenance burden.
Is there any way I can retrieve the path to the cmake_pch.hxx.cxx
file without hardcoding it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我所知,与 sfml-system 的目标参数关联的标志已经应用于 PCH。这是我的重现器:
然后我创建空的
main.cpp
和PCH.hpp
文件并进行构建的试运行:如您所见,两个标志都来自 < code>target_compile_options 和
CMAKE_CXX_FLAGS
(在命令行)应用于 PCH。所以到目前为止:
任何添加标志的合理方式都应该自动起作用。
As far as I can tell, the flags associated with the target argument to
sfml-system
are already applied to the PCH. Here's my reproducer:Then I create empty
main.cpp
andPCH.hpp
files and do a dry-run of the build:As you can see, both the flags from
target_compile_options
andCMAKE_CXX_FLAGS
(at the command line) applied to the PCH.So to this point:
Any halfway reasonable way of adding flags should work automatically.