zmi*_*jko 0 cmake cross-compiling
我使用CMake在Windows,OSX和Linux上生成生成文件(makefile或项目文件),并使用这些平台的本机C和C ++编译器。在Windows I gnerate VS 2010项目上,在Release配置中,发生以下错误:
命令行错误D8016:'/ ZI'和'/ Ob2'命令行选项不兼容
显然,CMake会生成不兼容的优化和调试信息选项。这是默认的CMake配置,我没有设置任何特殊标志。
我通过在Visual Studio的项目选项中将/ ZI更改为/ Z7来解决此问题,但这使设置连续集成系统很烦人-我需要添加脚本来修改项目文件。
我可以强制CMake替代/ ZI来/ Z7(与C7兼容的调试信息)吗?
另外,如何使它仅在Release配置中而不在Debug中生成?
我不认为CMake /ZI默认情况下适用于Release标志-可能是在您的CMakeLists.txt或它所包含的CMake文件之一中的其他地方应用了。
但是,您可以通过执行以下操作来切换标志:
if(MSVC)
string(REGEX REPLACE "/Z[iI7]" ""
CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Z7")
endif()
Run Code Online (Sandbox Code Playgroud)
第一条线所有/Zi,/ZI和/Z7标志,如果他们在发行标志已经存在。注意使用"圆角"${CMAKE_CXX_FLAGS_RELEASE}"。重要的是,此CMake变量保持单个字符串。如果删除引号,则该变量将成为用分号分隔的列表(即,每个空格都用分号代替),这不适合传递给编译器。
如果需要,可以在此处给出冲突的标志。因此,如果删除了该string(REGEX REPLACE ...)命令并仅保留了该set命令,则${CMAKE_CXX_FLAGS_RELEASE}可以包含... /ZI ... /Z7 ...",但是只要/Z7最后一个调试信息标志是“ wins”并且是最后一个被应用的标志。
但是,对于首先要清理变量的少量工作,我认为值得删除冲突的标志。
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |