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.
This commit is contained in:
parent
dcc2a7ccd4
commit
806609c702
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
int lib() { return 0; }
|
|
@ -0,0 +1,4 @@
|
|||
STRINGTABLE
|
||||
BEGIN
|
||||
1234 "5"
|
||||
END
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue