gpt4 book ai didi

c++ - 如何在 CMAKE 中为不同的文件使用不同的编译选项进行编译?

转载 作者:太空狗 更新时间:2023-10-29 20:02:14 27 4
gpt4 key购买 nike

我有这样一个项目:

|--CMakeLists.txt(1)
|--File1.cpp -W -W-all
|--Folder1
|--CMakeLists.txt(2)
|--File2.cpp -W -W-all -fno-rtti

正如您在上面看到的,File2.cpp 需要使用 -fno-rtti 进行编译,而其他文件应该使用 rtti 进行编译。发生这种情况是因为我在我的项目中同时使用了 clang 和 boost 库。我这样写 CMakeLists.txt(1):

SET (CMAKE_CXX_FLAGS "-std=c++11 -fexceptions -fno-rtti -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -Wno-long-long" )

并且,在 CMakeLists.txt(2) 中,我添加了以下内容:

add_definitions( -fno-rtti ) 

上述方法无效。事实上,以下内容在 CMakeLists.txt(2) 中对我都不起作用

set_property(SOURCE File2.cpp APPEND_STRING PROPERTY CMAKE_CXX_FLAGS " -fno-rtti ")
set_property(SOURCE File2.cpp APPEND_STRING PROPERTY COMPILE_FLAGS " -fno-rtti ")
ADD_DEFINITIONS(CMAKE_CXX_FLAGS " -fno-rtti ")
ADD_DEFINITIONS(COMPILE_FLAGS " -fno-rtti ")
ADD_DEFINITIONS( -fno-rtti )

我错过了什么吗?

最佳答案

AFAIK CMake 不允许为每个文件指定编译选项。你能做的最好的事情就是为你想用 -fno-rtti 编译的文件创建一个目标,例如使用 add_library,并将编译选项添加到此目标。

add_definitions旨在添加预处理器定义。你应该考虑 add_compile_options相反:

add_compile_options(-fno-rtti)

为避免全局污染并确保您将选项添加到给定目标,您可以考虑使用target_compile_options。 :

target_compile_options(foo PUBLIC -fno-rtti)

不相关,但不是使用 set(CMAKE_CXX_FLAGS "-std=c++11 ...") 手动设置标志以启用 c++11,而是让 cmake 做更细粒度的工作与 compile features ,或者至少是标准选择:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

编辑:

仔细查看文档,您可以使用 set_source_files_properties 为每个源文件设置编译标志。与 COMPILE_FLAGS :

set_source_files_properties(File2.cpp PROPERTIES COMPILE_FLAGS -fno-rtti)

关于c++ - 如何在 CMAKE 中为不同的文件使用不同的编译选项进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com