Cmake ASM_MASM语言不添加target_compile_options()到MASM ml.exe命令.&l



当尝试使用cmake 3.24.3版本组装MASM项目时,

下面的target_compile_options()
if(WIN32)
target_compile_options(HelloWorld
PUBLIC
/DBUILD_HelloWorld
/FlHelloWorld.lst
)
target_link_options(HelloWorld
PUBLIC
/SUBSYSTEM:Console,6.01
/SAFESEH:NO
)
...

没有被添加到MASM命令

[Build:x86] ml.exe /c /nologo /Zi /Fo"HelloWorld.dirDebugCodeBaseEND.obj" /D"CMAKE_INTDIR="Debug"" ...

然而,在连接阶段,target_link_options()被加入

[Build:x86] C:Program Files (x86)Microsoft Visual Studio2019ProfessionalVCToolsMSVC14.29.30133binHostX64x86link.exe /ERRORREPORT:QUEUE ... /SAFESEH:NO /SUBSYSTEM:Console,6.01

CMakeLists.txt文件定义了这些语言

project(HelloWorld VERSION 1.0.0 LANGUAGES C CXX ASM_MASM)

任何想法为什么编译选项被省略或修复可能在哪里?

编辑

似乎与CMake没有为ASM_MASM添加预处理器定义有关

使用set_source_files_properties运行

set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/asm/helloWorld.asm PROPERTIES COMPILE_FLAGS "/DBUILD_HelloWorld /FlHelloWorld.lst")   

选项被正确添加

[Build:x86] ml.exe /c /nologo /Zi /Fo"HelloWorld.dirDebughelloWorld.obj" /D"CMAKE_INTDIR="Debug"" /D"BUILD_HelloWorld" /Fl"HelloWorld.lst" ...

应用于多个唯一的asm文件

foreach(FILE {PROJECT_SOURCES})
get_filename_component(FILENAMEONLY ${FILE} NAME_WLE)
set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "/Fl${FILENAMEONLY}.lst /DBUILD_{BINARY_NAME}")
endforeach()

仍然不确定为什么target_compile_options不工作?

target_compile_options(HelloWorld
PUBLIC
/DBUILD_HelloWorld
/FlHelloWorld.lst
)

提交bug报告给CMAKE: https://gitlab.kitware.com/cmake/cmake/-/issues/24289

最新更新