diff --git a/CMakeLists.txt b/CMakeLists.txt
index a93fe7c54c3ca1a955096e646d1f9a3317c2e0b0..745f08cb9a66f992617ab28c3b8c3c4281ecca49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -912,6 +912,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
           -lchameleon_starpu
           ${STARPU_LIBRARIES_DEP}
         )
+        link_directories(${STARPU_LIBRARY_DIRS_DEP})
     elseif(CHAMELEON_SCHED_PARSEC)
         list(APPEND CHAMELEON_DEP
           -lchameleon_parsec
diff --git a/compute/CMakeLists.txt b/compute/CMakeLists.txt
index 784b42d1f05119a068c5647d9a1b807dade3a714..68a77fe561d452f473a2eef963774b4c3675bcc0 100644
--- a/compute/CMakeLists.txt
+++ b/compute/CMakeLists.txt
@@ -248,6 +248,15 @@ endif(HAVE_ISO_C_BINDING)
 # ------------
 add_library(chameleon ${CHAMELEON_SRCS} ${CHAMELEON_SRCSF})
 
+target_link_libraries(chameleon coreblas)
+if(CHAMELEON_SCHED_STARPU)
+  target_link_libraries(chameleon chameleon_starpu)
+elseif(CHAMELEON_SCHED_PARSEC)
+  target_link_libraries(chameleon chameleon_parsec)
+elseif(CHAMELEON_SCHED_QUARK)
+  target_link_libraries(chameleon chameleon_quark)
+endif()
+
 add_dependencies(chameleon
   chameleon_include
   coreblas_include
diff --git a/coreblas/compute/CMakeLists.txt b/coreblas/compute/CMakeLists.txt
index e50cb56f2bc6e10fd34f78d996de2b1084a5641d..6dc104b74a527d790c76b5f0e9b3bc584cb1d8f3 100644
--- a/coreblas/compute/CMakeLists.txt
+++ b/coreblas/compute/CMakeLists.txt
@@ -103,6 +103,12 @@ add_dependencies(coreblas coreblas_include)
 set_property(TARGET coreblas PROPERTY LINKER_LANGUAGE Fortran)
 set_property(TARGET coreblas PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 
+if(NOT CHAMELEON_SIMULATION)
+  target_link_libraries(coreblas ${LAPACKE_LIBRARIES} ${CBLAS_LIBRARIES})
+else(NOT CHAMELEON_SIMULATION)
+  target_link_libraries(coreblas simulapacke simucblas)
+endif(NOT CHAMELEON_SIMULATION)
+
 # # Dependencies step
 # # -----------------
 # foreach(_external_package "blas" "cblas" "lapack" "lapacke")
diff --git a/cudablas/compute/CMakeLists.txt b/cudablas/compute/CMakeLists.txt
index 79812cbba5091a462521c9202138cffda8e3bdfd..91550a04965fe726dd5b7b9c1b8e1349aaa77b02 100644
--- a/cudablas/compute/CMakeLists.txt
+++ b/cudablas/compute/CMakeLists.txt
@@ -68,6 +68,11 @@ add_library(cudablas ${CUDABLAS_SRCS})
 add_dependencies(cudablas cudablas_include)
 set_property(TARGET cudablas PROPERTY LINKER_LANGUAGE Fortran)
 
+target_link_libraries(cudablas coreblas ${CUDA_LIBRARIES})
+if(CHAMELEON_USE_MAGMA)
+  target_link_libraries(cudablas ${MAGMA_LIBRARIES})
+endif(CHAMELEON_USE_MAGMA)
+
 # installation
 # ------------
 install(TARGETS cudablas
diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt
index 0fadbfb10c6219e0247accc9620a998a4d8c2517..064ac0d39af53352949712bfdac2fdf49b68d187 100644
--- a/runtime/parsec/CMakeLists.txt
+++ b/runtime/parsec/CMakeLists.txt
@@ -170,6 +170,11 @@ add_library(chameleon_parsec ${RUNTIME_SRCS})
 set_property(TARGET chameleon_parsec PROPERTY LINKER_LANGUAGE Fortran)
 set_property(TARGET chameleon_parsec PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 
+target_link_libraries(chameleon_parsec coreblas ${PARSEC_LIBRARIES})
+if(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+  target_link_libraries(chameleon_parsec cudablas)
+endif(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+
 add_dependencies(chameleon_parsec
   chameleon_include
   coreblas_include
diff --git a/runtime/quark/CMakeLists.txt b/runtime/quark/CMakeLists.txt
index c66a21b55dde325a0a37cf736432e463718df54a..5729fe0016ccfab3d0ec95f55c50d052dd75f5a0 100644
--- a/runtime/quark/CMakeLists.txt
+++ b/runtime/quark/CMakeLists.txt
@@ -167,6 +167,11 @@ add_library(chameleon_quark ${RUNTIME_SRCS})
 set_property(TARGET chameleon_quark PROPERTY LINKER_LANGUAGE Fortran)
 set_property(TARGET chameleon_quark PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 
+target_link_libraries(chameleon_quark coreblas ${QUARK_LIBRARIES})
+if(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+  target_link_libraries(chameleon_quark cudablas)
+endif(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+
 add_dependencies(chameleon_quark
   chameleon_include
   coreblas_include
diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt
index f54b27697f514417c30d265d53305a619c34d6cb..c8919aa52c2a40000a49b769e63feef7a5208198 100644
--- a/runtime/starpu/CMakeLists.txt
+++ b/runtime/starpu/CMakeLists.txt
@@ -188,6 +188,11 @@ add_library(chameleon_starpu ${RUNTIME_SRCS})
 set_property(TARGET chameleon_starpu PROPERTY LINKER_LANGUAGE Fortran)
 set_property(TARGET chameleon_starpu PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
 
+target_link_libraries(chameleon_starpu coreblas ${STARPU_LIBRARIES})
+if(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+  target_link_libraries(chameleon_starpu cudablas)
+endif(CHAMELEON_USE_CUDA OR CHAMELEON_USE_MAGMA)
+
 add_dependencies(chameleon_starpu
   chameleon_include
   coreblas_include