From 806609c7024dbf07a639a9d77074d4bc82ae1b8a Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 26 Jun 2015 09:38:35 -0400 Subject: [PATCH] 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. --- Modules/Platform/Windows-MSVC.cmake | 1 + Tests/VSResource/CMakeLists.txt | 3 +++ Tests/VSResource/lib.cpp | 1 + Tests/VSResource/lib.rc | 4 ++++ Tests/VSResource/main.cpp | 4 +++- 5 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Tests/VSResource/lib.cpp create mode 100644 Tests/VSResource/lib.rc diff --git a/Modules/Platform/Windows-MSVC.cmake b/Modules/Platform/Windows-MSVC.cmake index 13fe8bc9c..2537e3921 100644 --- a/Modules/Platform/Windows-MSVC.cmake +++ b/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 diff --git a/Tests/VSResource/CMakeLists.txt b/Tests/VSResource/CMakeLists.txt index 17eb04136..3b9cfc396 100644 --- a/Tests/VSResource/CMakeLists.txt +++ b/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") diff --git a/Tests/VSResource/lib.cpp b/Tests/VSResource/lib.cpp new file mode 100644 index 000000000..006e3e48a --- /dev/null +++ b/Tests/VSResource/lib.cpp @@ -0,0 +1 @@ +int lib() { return 0; } diff --git a/Tests/VSResource/lib.rc b/Tests/VSResource/lib.rc new file mode 100644 index 000000000..1ffade6ca --- /dev/null +++ b/Tests/VSResource/lib.rc @@ -0,0 +1,4 @@ +STRINGTABLE +BEGIN + 1234 "5" +END diff --git a/Tests/VSResource/main.cpp b/Tests/VSResource/main.cpp index 7ee0c74fa..ccf700c42 100644 --- a/Tests/VSResource/main.cpp +++ b/Tests/VSResource/main.cpp @@ -1,6 +1,8 @@ #include #include +extern int lib(); + struct x { const char *txt; @@ -76,5 +78,5 @@ int main(int argc, char** argv) } } - return ret; + return ret + lib(); }