当尝试使用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