Using generator expression with add_library

I want to build a shared library for Linux and a static library for Windows. So I have tried:

 set (_star_lib_name "StdStars")
 
 add_library(${_star_lib_name} 
             $<$<CXX_COMPILER_ID:GNU>:SHARED>
             $<$<CXX_COMPILER_ID:MSVC>:STATIC> 
             ""
 )

but that gives me error:

CMake Error at C:/SVNProj/zodiac/branches/TRY_TML_CMake_3Oct2019/StarLibs/StdStars/CMakeLists.txt:7 (add_library):
Cannot find source file:

    STATIC

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
  .hpp .hxx .in .txx

What is the correct way of doing this?

add_library() has to know the library type at configure-time - trying to change it with a generator expression won’t work. Try this instead:

if(MSVC)
  set(_type STATIC)
else()
  set(_type SHARED)
endif()
add_library(StdStars ${_type}
  # sources here
  )

Thanks for your answer.