diff --git a/CMakeLists.txt b/CMakeLists.txt
index 577bc5d..8c24cca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -259,6 +259,15 @@
 
     endif ()
 
+    if (MINGW)
+        target_compile_options(${target} PRIVATE
+                -DWIN32_LEAN_AND_MEAN
+                -DNTDDI_VERSION=NTDDI_VISTA -D_WIN32_WINNT=_WIN32_WINNT_VISTA
+        )
+        target_compile_options(${target} PRIVATE -municode -UUNICODE)
+        target_link_options(${target} PRIVATE -municode)
+    endif()
+
     # optional dependencies
     target_link_libraries(${target} PUBLIC
         $<TARGET_NAME_IF_EXISTS:PkgConfig::liblz4>
@@ -514,14 +523,6 @@
 
 add_library_deps(openvpn)
 
-if (MINGW)
-    target_compile_options(openvpn PRIVATE
-        -DWIN32_LEAN_AND_MEAN
-        -DNTDDI_VERSION=NTDDI_VISTA -D_WIN32_WINNT=_WIN32_WINNT_VISTA
-        )
-    target_compile_options(openvpn PRIVATE -municode -UUNICODE)
-    target_link_options(openvpn PRIVATE -municode)
-endif()
 
 if (MSVC)
     # we have our own manifest
@@ -634,6 +635,11 @@
 
         target_include_directories(${test_name} PRIVATE src/openvpn)
 
+        if (MINGW)
+            # when compiling with -municode, mingw looks for wmain instead of main
+            target_compile_definitions(${test_name} PRIVATE -Dmain=wmain)
+        endif ()
+
         if (NOT ${test_name} STREQUAL "test_buffer")
             target_sources(${test_name} PRIVATE
                 src/openvpn/buffer.c
