diff --git a/CMakeLists.txt b/CMakeLists.txt
index 729f9eda40700f83448fae7f4532a89e6c6db516..8ff5f0870fc8211e4a77f9542900a522d542ca7e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,50 +1,56 @@
 cmake_minimum_required( VERSION 3.27 FATAL_ERROR )
 
 message(VERBOSE "Entering libcdi")
-project(libcdi VERSION 2.5.1 LANGUAGES C )
+project(cdilib VERSION 2.5.1 LANGUAGES C )
 set(CMAKE_C_STANDARD 11)
 
 include(CTest)
 include(CheckIncludeFile)
 
+
+
 # enable default internal libs
-add_compile_definitions(HAVE_LIBGRIB=1)
-add_compile_definitions(HAVE_LIBCGRIBEX=1)
-add_compile_definitions(HAVE_LIBEXTRA=1)
-add_compile_definitions(HAVE_LIBSERVICE=1)
-add_compile_definitions(HAVE_LIBIEG=1)
+list(APPEND cdi_compile_defs
+  HAVE_LIBGRIB=1
+  HAVE_LIBCGRIBEX=1
+  HAVE_LIBEXTRA=1
+  HAVE_LIBSERVICE=1
+  HAVE_LIBIEG=1
+)
 
 # ecCodes
 find_package(eccodes)
 if (${eccodes_FOUND})
-  add_compile_definitions(HAVE_LIBGRIB_API=${eccodes_FOUND})
+  list(APPEND cdi_compile_defs HAVE_LIBGRIB_API=${eccodes_FOUND})
   message(VERBOSE "added compile definition HAVE_LIBGRIB_API=${eccodes_FOUND}")
 else()
-  message(WARNING "netcdf not found, compiling without netcdf")
+  message(WARNING "eccodes not found, compiling without eccodes")
 endif ()
 
 # NetCDF
 find_package(netCDF COMPONENTS C REQUIRED)
-check_include_file("netcdf.h" ${netcdf_flag} C)
-if (${netCDF_FOUND})
-  message(VERBOSE "added compile definition HAVE_LIBNETCDF=${netCDF_FOUND}")
-  message(VERBOSE "added compile definition HAVE_NETCDF4=${netCDF_FOUND}")
-  add_compile_definitions(HAVE_LIBNETCDF=${netCDF_FOUND})
-  add_compile_definitions(HAVE_NETCDF4=${netCDF_FOUND})
+if (TARGET netCDF::netcdf)
+  list(APPEND cdi_compile_defs
+    HAVE_LIBNETCDF=${netCDF_FOUND}
+    HAVE_LIBNC_DAP=${netCDF_FOUND}
+    HAVE_NETCDF4=${netCDF_FOUND}
+    HAVE_LIBGRIB_API=${netCDF_FOUND}
+    HAVE_LIBGRIB=${netCDF_FOUND}
+  )
+  message(VERBOSE "added to list of definitions: ${cdi_compile_defs} ")
 else()
   message(WARNING "netcdf not found, compiling without netcdf")
 endif ()
 
 message(VERBOSE "looking for config.h in: ${PROJECT_BINARY_DIR}/src")
-include_directories( "${PROJECT_BINARY_DIR}/src/config.h")
-
 
 #adding subdirectories
 ## lib and general files
+list(APPEND cdi_compile_defs CDI=1 CDI_SIZE_TYPE=size_t PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}")
 add_subdirectory(src)
-## cdi executable
-add_subdirectory(app)
 
 #tests
-add_subdirectory( tests )
+add_subdirectory(app)
+add_subdirectory(tests)
+
 
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 73253a6a1bcb5bfc3e040316791229889c3ddd22..ff3047c998e1452196ce33d84efc7db3088ef98b 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -2,8 +2,11 @@ add_executable(cdi
   cdi.c printinfo.c
 )
 
-target_include_directories(cdi PUBLIC
+target_include_directories(cdi PRIVATE
   $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
   $<INSTALL_INTERFACE:include
 )
-target_link_libraries(cdi PUBLIC cdilib netCDF::netcdf pthread)
+
+target_link_libraries(cdi PRIVATE cdilib netCDF::netcdf pthread)
+target_include_directories(cdi PRIVATE "${PROJECT_BINARY_DIR}/src/config.h")
+target_compile_definitions(cdi PRIVATE  ${cdi_netcdf_definitions})
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c59d267e15c1bdc344d5754c08c33846b92fe2d5..b7dde6384f20bb9a53d8a8cec63f15517faa3d4b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -195,7 +195,9 @@ add_library(cdilib
 #  INSTALL_HEADERS_LIST  cdi.h
 )
 
-target_link_libraries(cdilib eccodes ${netCDF_LIBRARIES})
-target_compile_definitions(cdilib PRIVATE CDI=1)
-target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="cdilib")
-target_compile_definitions(cdilib PRIVATE VERSION="${CMAKE_PROJECT_VERSION}")
+target_include_directories(cdilib PRIVATE "${PROJECT_BINARY_DIR}/src/config.h")
+target_link_libraries(cdilib eccodes netCDF::netcdf)
+target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}" ${cdi_compile_defs})
+
+add_library(cdilib::cdilib ALIAS cdilib)
+