1
0
Эх сурвалжийг харах

VS: Add /machine: flag to Librarian tool (#11240)

If a Windows resource (.rc) source file is included in a STATIC library,
the VS "link" tool will process the compiled ".res" file and needs to know
the target architecture.  Without it, we may get a LNK4068 warning and
possibly a LNK1112 error.  Add /machine: to the default static library
flags to give the link tool the information it needs.
Brad King 10 жил өмнө
parent
commit
806609c702

+ 1 - 0
Modules/Platform/Windows-MSVC.cmake

@@ -230,6 +230,7 @@ elseif(MSVC_Fortran_ARCHITECTURE_ID)
   set(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}")
 endif()
 set(CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT} ${_MACHINE_ARCH_FLAG}")
+set(CMAKE_STATIC_LINKER_FLAGS_INIT "${CMAKE_STATIC_LINKER_FLAGS_INIT} ${_MACHINE_ARCH_FLAG}")
 unset(_MACHINE_ARCH_FLAG)
 
 # add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype

+ 3 - 0
Tests/VSResource/CMakeLists.txt

@@ -46,7 +46,10 @@ else()
   include_directories(${CMAKE_CURRENT_BINARY_DIR})
 endif()
 
+add_library(ResourceLib STATIC lib.cpp lib.rc)
+
 add_executable(VSResource main.cpp test.rc)
+target_link_libraries(VSResource ResourceLib)
 
 set_property(TARGET VSResource
   PROPERTY VS_GLOBAL_CMakeTestVsGlobalVariable "test val")

+ 1 - 0
Tests/VSResource/lib.cpp

@@ -0,0 +1 @@
+int lib() { return 0; }

+ 4 - 0
Tests/VSResource/lib.rc

@@ -0,0 +1,4 @@
+STRINGTABLE
+BEGIN
+  1234 "5"
+END

+ 3 - 1
Tests/VSResource/main.cpp

@@ -1,6 +1,8 @@
 #include <windows.h>
 #include <stdio.h>
 
+extern int lib();
+
 struct x
 {
   const char *txt;
@@ -76,5 +78,5 @@ int main(int argc, char** argv)
       }
     }
 
-  return ret;
+  return ret + lib();
 }