diff --git a/CMakeLists.txt b/CMakeLists.txt
index a01ab0281b87b4848d793b60d671bd351f4dd501..182a94163811795c4786d46c88d17fd0467582dc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,6 +87,7 @@ if(USE_CXX)
     set(HEADERS_C
         includeC/sfx_data.h
     )
+    list(APPEND HEADERS_DIRS includeC/)
 
     set(SOURCES_CXX 
             srcCXX/model_base.cpp
@@ -104,6 +105,8 @@ if(USE_CXX)
             includeCXX/sfx_sheba.h
             includeCXX/sfx_call_class_func.h
         )
+        list(APPEND HEADERS_DIRS includeCU/)
+        list(APPEND HEADERS_DIRS includeCXX/)
 endif(USE_CXX)
 
 if(INCLUDE_CUDA)
@@ -149,6 +152,7 @@ endif(USE_CXX OR INCLUDE_CUDA)
 add_executable(sfx ${SOURCES})
 set_property(TARGET sfx PROPERTY LINKER_LANGUAGE Fortran)
 target_include_directories(sfx PUBLIC ${CMAKE_BINARY_DIR}/modules/)
+target_include_directories(sfx PUBLIC ${HEADERS_DIRS})
 
 if(USE_CONFIG_PARSER)
     target_link_libraries(sfx config_parser_F config_parser_CXX)
diff --git a/includeCU/sfx_memory_processing.cuh b/includeCU/sfx_memory_processing.cuh
index c68c858db0764633b37d9cfce0ee0f92bd1d1d69..2e68b1402dcfd009ef694a22730946e0728d4729 100644
--- a/includeCU/sfx_memory_processing.cuh
+++ b/includeCU/sfx_memory_processing.cuh
@@ -1,5 +1,5 @@
 #pragma once
-#include "../includeCXX/sfx_template_parameters.h"
+#include "sfx_template_parameters.h"
 #include <cstddef>
 
 namespace memproc
diff --git a/includeCU/sfx_model_compute_subfunc.cuh b/includeCU/sfx_model_compute_subfunc.cuh
index 655555fd8f64ada84b398181edb3d6233548dc57..ecc53f20a1889bfe7024ce652b070c610090cfd0 100644
--- a/includeCU/sfx_model_compute_subfunc.cuh
+++ b/includeCU/sfx_model_compute_subfunc.cuh
@@ -1,6 +1,6 @@
 #pragma once 
-#include "../includeC/sfx_data.h"
-#include "../includeCU/sfx_math.cuh"
+#include "sfx_data.h"
+#include "sfx_math.cuh"
 
 template<typename T, class sfx_param>
 FUCNTION_DECLARATION_SPECIFIER void get_convection_lim(T &zeta_lim, T &Rib_lim, T &f_m_lim, T &f_h_lim,
diff --git a/includeCU/sfx_surface.cuh b/includeCU/sfx_surface.cuh
index 9cd656933065a6347e47eb4c340384c3315b1ed1..c2d6ebe54abd4d45fafbeddcea558c3800f0e236 100644
--- a/includeCU/sfx_surface.cuh
+++ b/includeCU/sfx_surface.cuh
@@ -1,6 +1,6 @@
 #pragma once
-#include "../includeC/sfx_data.h"
-#include "../includeCU/sfx_math.cuh"
+#include "sfx_data.h"
+#include "sfx_math.cuh"
 
 template<typename T>
 FUCNTION_DECLARATION_SPECIFIER void get_thermal_roughness(T &z0_t, T &B,
diff --git a/includeCXX/model_base.h b/includeCXX/model_base.h
index f51c7e7b4aa08d2864626f847a1008835a6f8165..2a3bb893d0d9eef0bcb2f5bb10fa2a2f920e4f52 100644
--- a/includeCXX/model_base.h
+++ b/includeCXX/model_base.h
@@ -1,7 +1,7 @@
 #pragma once
 #include <cstddef>
 #include "sfx_template_parameters.h"
-#include "../includeC/sfx_data.h"
+#include "sfx_data.h"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 class ModelBase
diff --git a/includeCXX/sfx_call_class_func.h b/includeCXX/sfx_call_class_func.h
index 0d79140b7adb6b27f81f4e03a655fcb976f5afed..8cdb0a77e3e57a1e9f64fccb2dcb1e67a71cb850 100644
--- a/includeCXX/sfx_call_class_func.h
+++ b/includeCXX/sfx_call_class_func.h
@@ -1,5 +1,5 @@
 #pragma once
-#include "../includeC/sfx_data.h"
+#include "sfx_data.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/includeCXX/sfx_esm.h b/includeCXX/sfx_esm.h
index c1cc836a5c721f349b722a73002ba3128ceae292..d4040389d69569e6ba7799606906abe7f13c8db8 100644
--- a/includeCXX/sfx_esm.h
+++ b/includeCXX/sfx_esm.h
@@ -1,7 +1,7 @@
 #pragma once
 #include "sfx_template_parameters.h"
-#include "../includeCXX/model_base.h"
-#include "../includeC/sfx_data.h"
+#include "model_base.h"
+#include "sfx_data.h"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 class FluxEsmBase : public ModelBase<T, memIn, memOut, RunMem>
diff --git a/includeCXX/sfx_sheba.h b/includeCXX/sfx_sheba.h
index ae9e7fff1d2503c96aa2885bb01ec2863945af25..33c93aa76be928524577774d0831e41b83546c76 100644
--- a/includeCXX/sfx_sheba.h
+++ b/includeCXX/sfx_sheba.h
@@ -1,7 +1,7 @@
 #pragma once
 #include "sfx_template_parameters.h"
-#include "../includeCXX/model_base.h"
-#include "../includeC/sfx_data.h"
+#include "model_base.h"
+#include "sfx_data.h"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 class FluxShebaBase : public ModelBase<T, memIn, memOut, RunMem>
diff --git a/srcC/sfx_call_cxx.c b/srcC/sfx_call_cxx.c
index 506e4646936355e7512ff74b3f76ecc36dfb064b..208a8ed67505caacbadf5cc8794d5ebb12dfc65a 100644
--- a/srcC/sfx_call_cxx.c
+++ b/srcC/sfx_call_cxx.c
@@ -1,6 +1,6 @@
 #include <stdlib.h>
 #include <stdio.h>
-#include "../includeCXX/sfx_call_class_func.h"
+#include "sfx_call_class_func.h"
 // #include "../includeC/sfx_call_cxx.h"
 // -------------------------------------------------------------------------- //
 
diff --git a/srcCU/sfx_esm.cu b/srcCU/sfx_esm.cu
index 424383ece427624670c4377f72901db6d195c1b2..f8028d63a82ee44d920518671ce728799a2030e6 100644
--- a/srcCU/sfx_esm.cu
+++ b/srcCU/sfx_esm.cu
@@ -1,10 +1,10 @@
 #include <cuda.h>
 #include <cuda_runtime_api.h>
 
-#include "../includeCXX/sfx_esm.h"
-#include "../includeCU/sfx_model_compute_subfunc.cuh"
-#include "../includeCU/sfx_surface.cuh"
-#include "../includeCU/sfx_memory_processing.cuh"
+#include "sfx_esm.h"
+#include "sfx_model_compute_subfunc.cuh"
+#include "sfx_surface.cuh"
+#include "sfx_memory_processing.cuh"
 
 namespace sfx_kernel
 {
diff --git a/srcCU/sfx_memory_processing.cu b/srcCU/sfx_memory_processing.cu
index 7dcc6cb5aedd07261cbe7d38ae1dcb5630859e73..8d622c1962312c9bb57f59832b099ed103c22e66 100644
--- a/srcCU/sfx_memory_processing.cu
+++ b/srcCU/sfx_memory_processing.cu
@@ -1,4 +1,4 @@
-#include "../includeCU/sfx_memory_processing.cuh"
+#include "sfx_memory_processing.cuh"
 #include <cuda.h>
 #include <cuda_runtime_api.h>
 
diff --git a/srcCU/sfx_sheba.cu b/srcCU/sfx_sheba.cu
index c44a4bc145edcc2acfbe4ae59261e30524d77cd6..2161b18798a531a8c81135c9a7e4c4058ff8bb45 100644
--- a/srcCU/sfx_sheba.cu
+++ b/srcCU/sfx_sheba.cu
@@ -1,10 +1,10 @@
 #include <cuda.h>
 #include <cuda_runtime_api.h>
 
-#include "../includeCXX/sfx_sheba.h"
-#include "../includeCU/sfx_model_compute_subfunc.cuh"
-#include "../includeCU/sfx_surface.cuh"
-#include "../includeCU/sfx_memory_processing.cuh"
+#include "sfx_sheba.h"
+#include "sfx_model_compute_subfunc.cuh"
+#include "sfx_surface.cuh"
+#include "sfx_memory_processing.cuh"
 
 namespace sfx_kernel
 {
diff --git a/srcCXX/model_base.cpp b/srcCXX/model_base.cpp
index ca1bcdb48c8633d6b6e6e21f37d7fab9d5a0c1b4..a72d47d5973035b4a7dd639c004f566802273a8b 100644
--- a/srcCXX/model_base.cpp
+++ b/srcCXX/model_base.cpp
@@ -1,9 +1,9 @@
-#include "../includeCXX/model_base.h"
+#include "model_base.h"
 
 #ifdef INCLUDE_CUDA
-    #include "../includeCU/sfx_memory_processing.cuh"
+    #include "sfx_memory_processing.cuh"
 #endif
-#include "../includeCXX/sfx_memory_processing.h"
+#include "sfx_memory_processing.h"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 ModelBase<T, memIn, memOut, RunMem>::ModelBase(sfxDataVecTypeC* sfx_in,
diff --git a/srcCXX/sfx_call_class_func.cpp b/srcCXX/sfx_call_class_func.cpp
index 1cc665d1c8da5d3ae8c5f89e14c35dfb946811cc..9659c17b691ecb848a596bbf94de4accd181506f 100644
--- a/srcCXX/sfx_call_class_func.cpp
+++ b/srcCXX/sfx_call_class_func.cpp
@@ -1,8 +1,8 @@
 #include <stdlib.h>
 #include <stdio.h>
-#include "../includeCXX/sfx_call_class_func.h"
-#include "../includeCXX/sfx_esm.h"
-#include "../includeCXX/sfx_sheba.h"
+#include "sfx_call_class_func.h"
+#include "sfx_esm.h"
+#include "sfx_sheba.h"
 #include <vector>
 
 // -------------------------------------------------------------------------- //
diff --git a/srcCXX/sfx_esm.cpp b/srcCXX/sfx_esm.cpp
index 2d8979c29787cd468711217753da41b2c2f85eba..c324e80f1fa91fd1fa26e7c5acfaa7dbd1af1713 100644
--- a/srcCXX/sfx_esm.cpp
+++ b/srcCXX/sfx_esm.cpp
@@ -1,14 +1,14 @@
 #include <iostream>
 #include <cmath>
 
-#include "../includeCXX/sfx_esm.h"
+#include "sfx_esm.h"
 #ifdef INCLUDE_CUDA
-    #include "../includeCU/sfx_memory_processing.cuh"
+    #include "sfx_memory_processing.cuh"
 #endif
 
-#include "../includeCXX/sfx_memory_processing.h"
-#include "../includeCU/sfx_surface.cuh"
-#include "../includeCU/sfx_model_compute_subfunc.cuh"
+#include "sfx_memory_processing.h"
+#include "sfx_surface.cuh"
+#include "sfx_model_compute_subfunc.cuh"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 FluxEsmBase<T, memIn, memOut, RunMem>::FluxEsmBase(sfxDataVecTypeC* sfx_in,
diff --git a/srcCXX/sfx_memory_processing.cpp b/srcCXX/sfx_memory_processing.cpp
index 1d5805a4716eb7c1068a5665c432a8caa95441ba..6b13745da36f58e8cf909206678e6d3583a11da4 100644
--- a/srcCXX/sfx_memory_processing.cpp
+++ b/srcCXX/sfx_memory_processing.cpp
@@ -1,4 +1,4 @@
-#include "../includeCXX/sfx_memory_processing.h"
+#include "sfx_memory_processing.h"
 #include <cstdlib>
 #include <cstring>
 
diff --git a/srcCXX/sfx_sheba.cpp b/srcCXX/sfx_sheba.cpp
index 5063ebbc10431834973a9d6fddfefda032400240..abd48c71e3c01b939e5b517525cb4963b8a441c4 100644
--- a/srcCXX/sfx_sheba.cpp
+++ b/srcCXX/sfx_sheba.cpp
@@ -1,14 +1,14 @@
 #include <iostream>
 #include <cmath>
 
-#include "../includeCXX/sfx_sheba.h"
+#include "sfx_sheba.h"
 #ifdef INCLUDE_CUDA
-    #include "../includeCU/sfx_memory_processing.cuh"
+    #include "sfx_memory_processing.cuh"
 #endif
 
-#include "../includeCXX/sfx_memory_processing.h"
-#include "../includeCU/sfx_surface.cuh"
-#include "../includeCU/sfx_model_compute_subfunc.cuh"
+#include "sfx_memory_processing.h"
+#include "sfx_surface.cuh"
+#include "sfx_model_compute_subfunc.cuh"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
 FluxShebaBase<T, memIn, memOut, RunMem>::FluxShebaBase(sfxDataVecTypeC* sfx_in,