compat BUILD provide source instead of an object

Because it allows for hiding its symbols.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c01dad..5f83c49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -262,11 +262,11 @@
     set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
     set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)       # remove -Wl,-Bdynamic
     set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
-    add_library(yang STATIC ${libsrc} $<TARGET_OBJECTS:compat>)
+    add_library(yang STATIC ${libsrc} ${compatsrc})
 else()
     set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-    add_library(yangobj OBJECT ${libsrc})
-    add_library(yang SHARED $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+    add_library(yangobj OBJECT ${libsrc} ${compatsrc})
+    add_library(yang SHARED $<TARGET_OBJECTS:yangobj>)
 
     #link dl
     target_link_libraries(yang ${CMAKE_DL_LIBS})
diff --git a/CMakeModules/UseCompat.cmake b/CMakeModules/UseCompat.cmake
index 13e77c6..7e624d9 100644
--- a/CMakeModules/UseCompat.cmake
+++ b/CMakeModules/UseCompat.cmake
@@ -1,6 +1,7 @@
 include(CheckSymbolExists)
 include(TestBigEndian)
 
+# defines "compatsrc" with source(s) of this small library
 macro(USE_COMPAT)
     # compatibility checks
     set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200809L)
@@ -18,9 +19,8 @@
 
     TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
 
-    # header and object file
+    # header and source file (adding the source directly allows for hiding its symbols)
     configure_file(${PROJECT_SOURCE_DIR}/compat/compat.h.in ${PROJECT_BINARY_DIR}/compat/compat.h @ONLY)
     include_directories(${PROJECT_BINARY_DIR}/compat)
-    add_library(compat OBJECT ${PROJECT_SOURCE_DIR}/compat/compat.c)
-    set_property(TARGET compat PROPERTY POSITION_INDEPENDENT_CODE ON)
+    set(compatsrc ${PROJECT_SOURCE_DIR}/compat/compat.c)
 endmacro()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 690a1df..692ddda 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -17,7 +17,7 @@
     cmake_parse_arguments(ADDTEST "" "NAME;WRAP" "SOURCES" ${ARGN})
     set(TEST_NAME utest_${ADDTEST_NAME})
 
-    add_executable(${TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+    add_executable(${TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:yangobj>)
     foreach(TEST_SOURCE ${ADDTEST_SOURCES})
         target_sources(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_SOURCE})
     endforeach()
diff --git a/tests/style/CMakeLists.txt b/tests/style/CMakeLists.txt
index 05c09ce..dd4285e 100644
--- a/tests/style/CMakeLists.txt
+++ b/tests/style/CMakeLists.txt
@@ -6,7 +6,7 @@
 endif()
 
 # just compile
-add_executable(cpp_compat cpp_compat.c $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+add_executable(cpp_compat cpp_compat.c $<TARGET_OBJECTS:yangobj>)
 target_include_directories(cpp_compat BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 target_link_libraries(cpp_compat ${CMAKE_THREAD_LIBS_INIT} ${PCRE2_LIBRARIES} ${CMAKE_DL_LIBS} m)
 target_compile_options(cpp_compat PUBLIC "-Werror=c++-compat")
diff --git a/tools/lint/CMakeLists.txt b/tools/lint/CMakeLists.txt
index 755d9d6..f09a3b1 100644
--- a/tools/lint/CMakeLists.txt
+++ b/tools/lint/CMakeLists.txt
@@ -22,7 +22,7 @@
     ${CMAKE_CURRENT_SOURCE_DIR}/*.h
     PARENT_SCOPE)
 
-add_executable(yanglint ${lintsrc} $<TARGET_OBJECTS:compat>)
+add_executable(yanglint ${lintsrc} ${compatsrc})
 target_link_libraries(yanglint yang)
 install(TARGETS yanglint DESTINATION ${CMAKE_INSTALL_BINDIR})
 install(FILES ${PROJECT_SOURCE_DIR}/tools/lint/yanglint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
diff --git a/tools/re/CMakeLists.txt b/tools/re/CMakeLists.txt
index eb2e5b8..795d834 100644
--- a/tools/re/CMakeLists.txt
+++ b/tools/re/CMakeLists.txt
@@ -8,7 +8,7 @@
     ${CMAKE_CURRENT_SOURCE_DIR}/*.c
     PARENT_SCOPE)
 
-add_executable(yangre ${resrc} $<TARGET_OBJECTS:compat>)
+add_executable(yangre ${resrc} ${compatsrc})
 target_link_libraries(yangre yang)
 install(TARGETS yangre DESTINATION ${CMAKE_INSTALL_BINDIR})
 target_include_directories(yangre BEFORE PRIVATE ${PROJECT_BINARY_DIR})