CMAKE设置rc编译器标志?

时间:2016-07-12 15:31:28

标签: cmake

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版本的版本,该命令仍然使用/ l" 0x0409"当使用@Florian的片段加上它时,它使用我为rc.exe命令指定的cl.exe命令的标志,这是不正确的。

1 个答案:

答案 0 :(得分:1)

引用问题已通过CMake 3.1版修复(请参阅"0010194: setting CMAKE_RC_FLAGS has no affect on rc flags")。

所以我已经尝试使用CMake版本3.6.0和#34; 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选项显示在&#34;项目配置属性/资源/命令行/附加选项&#34;下。因此,我无法重现任何引用或忽略选项问题。

enter image description here

Makefile vs.解决方案

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

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

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