CUDA: Link to standard system libraries when linking as CUDA

On Windows with MSVC-like host compilers we must honor the standard
libraries chosen by the `Platform/Windows-MSVC` module.  Otherwise C
code linked into the CUDA binary that expects to have these libraries
available may not link.
This commit is contained in:
Brad King 2017-02-14 10:34:10 -05:00
parent 8d75d8dc72
commit 1c60231ca5
3 changed files with 16 additions and 0 deletions

View File

@ -93,6 +93,12 @@ if(NOT CMAKE_NOT_USING_CONFIG_FLAGS)
endif()
if(CMAKE_CUDA_STANDARD_LIBRARIES_INIT)
set(CMAKE_CUDA_STANDARD_LIBRARIES "${CMAKE_CUDA_STANDARD_LIBRARIES_INIT}"
CACHE STRING "Libraries linked by default with all CUDA applications.")
mark_as_advanced(CMAKE_CUDA_STANDARD_LIBRARIES)
endif()
include(CMakeCommonLanguageInclude)
# now define the following rules:

View File

@ -40,3 +40,5 @@ string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -Xcompiler=-MDd,-Zi,-RTC1")
string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -Xcompiler=-MD")
string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -Xcompiler=-MD")
string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -Xcompiler=-MD")
set(CMAKE_CUDA_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")

View File

@ -1,6 +1,14 @@
extern int use_cuda(void);
#ifdef _WIN32
#include <windows.h>
#endif
int main()
{
#ifdef _WIN32
/* Use an API that requires CMake's "standard" C libraries. */
GetOpenFileName(NULL);
#endif
return use_cuda();
}