【问题标题】:CMAKE set rc compiler flags?CMAKE设置rc编译器标志?
【发布时间】:2016-07-12 15:31:28
【问题描述】:

CMake 版本 3.4.3

Visual Studio 14 2015 解决方案文件

我正在尝试使用以下语法为 CMAKE 的 rc 编译器设置位置标志,但它始终设置为值 /l"0x0409"。

set(rc_flags "/l 0x809")
set(CMAKE_RC_FLAGS ${rc_flags})

此外,CMAKE 总是为我无法停止的 rc 编译器设置 cl 编译器的标志。

任何帮助将不胜感激!

编辑

我添加了 cmake 版本和 Visual Studio 版本,当使用来自@Florian 的 sn-p 时,该命令仍然使用 /l"0x0409" 标志,并且它使用我为 rc.exe 的 cl.exe 命令指定的标志不正确的命令。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    CMake 3.1 版修复了报价问题(请参阅"0010194: setting CMAKE_RC_FLAGS has no affect on rc flags")。

    所以我已经尝试使用 CMake 版本 3.6.0 和“Visual Studio 14 2015”生成器以及以下代码为您的示例:

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.1)
    
    project(TestRCCompilerFlags)
    
    file(WRITE main.cpp "int main() { return 0; }")
    file(WRITE main.rc "")
    
    set(rc_flags "/l 0x809")
    set(CMAKE_RC_FLAGS ${rc_flags})
    
    add_executable(${PROJECT_NAME} main.cpp main.rc)
    

    并且 - 正如预期的那样 - /l 0x809 选项显示在“项目配置属性/资源/命令行/附加选项”下。所以我无法重现任何引用或忽略选项的问题。

    Makefile 与解决方案

    一般来说,RC 命令行(包括其标志)在CMakeRCInformation.cmake 中定义。但是,如果使用 makefile 生成器,您只能绝对控制 RC 命令行。在那里,您可以将 CMakeLists.txt 文件中的 CMAKE_RC_COMPILE_OBJECT 变量覆盖为:

    set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /l 0x809 /fo<OBJECT> <SOURCE>")
    

    Visual Studio 解决方案生成器的 RC 行为直接编码为 cmVisualStudio10TargetGenerator::WriteRCOptions()。此代码不会(过度)写入任何 RC &lt;Culture&gt; 部分,因此您将始终在那里看到默认的 /l"0x0409"。但是 CMake 生成的 &lt;AdditionalOptions&gt; 部分会处理这个/覆盖这些默认值。

    【讨论】:

    • 感谢弗洛里安,但是使用 set(CMAKE_RC_COMPILE_OBJECT " /l 0x809 /fo ") 也不起作用。
    • @simon-p-r 请提供更多信息。在您的项目命令之后,您是否在您的根 CMakeLists.txtset(CMAKE_RC_FLAGS "/l 0x809")?哪个 CMake 版本、哪个生成器以及哪个 Visual Studion 版本? “不工作”究竟是什么意思?该选项应显示在“项目配置属性/资源/命令行/附加选项”下。
    • @simon-p-r 感谢您提供详细信息。我已经给你一个代码尝试了,它似乎没有任何问题。有关更多信息,请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多