diff --git a/.github/workflows/conda/environment_all.yml b/.github/workflows/conda/environment_all.yml
index 5d8e21c5e962eedcb51514929baa082b84efb592..eac1ec0fa45488a12327dd4ea6f1c793e95f3291 100644
--- a/.github/workflows/conda/environment_all.yml
+++ b/.github/workflows/conda/environment_all.yml
@@ -4,7 +4,7 @@ channels:
 dependencies:
   - eigen
   - cmake
-  - numpy
+  - numpy<2.0
   - pkg-config
   - boost
   - ccache
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b3f2415e91a0e5a599fb03776c4ace2630762528..800d2097b9077de6e53a73b3438ea1f561e5f498 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
 ## [Unreleased]
 
+### Added
+- Add compatibility with jrl-cmakemodules workspace ([#485](https://github.com/stack-of-tasks/eigenpy/pull/485))
+
 ## [3.7.0] - 2024-06-11
 
 ### Added
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa9e1e7b1e1e8bdf2fa169aa4276f5865fe69589..423fa71344eef97ab150ecac8126c8c0e4fb5a1a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,10 @@ set(PROJECT_USE_CMAKE_EXPORT TRUE)
 set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE)
 set(PROJECT_CUSTOM_HEADER_EXTENSION "hpp")
 set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion)
+# To enable jrl-cmakemodules compatibility with workspace we must define the two
+# following lines
+set(PROJECT_AUTO_RUN_FINALIZE FALSE)
+set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})
 
 # Check if the submodule cmake have been initialized
 set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
@@ -344,10 +348,12 @@ set(${PROJECT_NAME}_SOURCES
 
 add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
                                    ${${PROJECT_NAME}_HEADERS})
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
 set_standard_output_directory(${PROJECT_NAME})
 target_include_directories(
   ${PROJECT_NAME} SYSTEM
   PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
          $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 modernize_target_link_libraries(
@@ -450,3 +456,5 @@ pkg_config_append_libs(${PROJECT_NAME})
 pkg_config_append_cflags("-I${PYTHON_INCLUDE_DIRS}")
 pkg_config_append_cflags("-I${NUMPY_INCLUDE_DIRS}")
 pkg_config_append_boost_libs(${BOOST_COMPONENTS})
+
+setup_project_finalize()
diff --git a/cmake b/cmake
index dd3e4127f2b223496859fe05be02726e9d1a071b..91b8f5f2168b123a198da079b8e6c09fd1f60285 160000
--- a/cmake
+++ b/cmake
@@ -1 +1 @@
-Subproject commit dd3e4127f2b223496859fe05be02726e9d1a071b
+Subproject commit 91b8f5f2168b123a198da079b8e6c09fd1f60285
diff --git a/doc/Doxyfile.extra.in b/doc/Doxyfile.extra.in
index 733ef2e24209ec5b24b9b6d59a4de4106805ccbf..d3290a4f13ce4c1eb0aefa1e3b0f01eeb8685559 100644
--- a/doc/Doxyfile.extra.in
+++ b/doc/Doxyfile.extra.in
@@ -1,6 +1,6 @@
-INPUT                  = @CMAKE_SOURCE_DIR@/src \
-                         @CMAKE_SOURCE_DIR@/doc/additionalDoc
-IMAGE_PATH             = @CMAKE_SOURCE_DIR@/doc/pictures
+INPUT                  = @PROJECT_SOURCE_DIR@/src \
+                         @PROJECT_SOURCE_DIR@/doc/additionalDoc
+IMAGE_PATH             = @PROJECT_SOURCE_DIR@/doc/pictures
 
 FILE_PATTERNS          = *.cc *.cpp *.h *.hpp *.hxx
 
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 4781e42f35a6d08e6b0e0f00960c61a162ed42b5..221a5c294eba23ae4b83e9414c1e95d061c64579 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -12,11 +12,12 @@ make_directory("${${PROJECT_NAME}_BINARY_DIR}/python/${PROJECT_NAME}")
 include(${JRL_CMAKE_MODULES}/python-helpers.cmake)
 include("${JRL_CMAKE_MODULES}/stubs.cmake")
 
-add_custom_target(python)
-set_target_properties(python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)
+add_custom_target(${PROJECT_NAME}_python)
+set_target_properties(${PROJECT_NAME}_python
+                      PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)
 
 add_library(${PYWRAP} MODULE main.cpp)
-add_dependencies(python ${PYWRAP})
+add_dependencies(${PROJECT_NAME}_python ${PYWRAP})
 target_link_libraries(${PYWRAP} PUBLIC ${PROJECT_NAME})
 
 python_build_get_target(python_build_target)
@@ -40,13 +41,13 @@ set_target_properties(
   PROPERTIES PREFIX ""
              SUFFIX ${PYTHON_EXT_SUFFIX}
              LIBRARY_OUTPUT_DIRECTORY
-             "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}"
+             "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}"
              LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
-             "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}"
+             "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}"
              RUNTIME_OUTPUT_DIRECTORY
-             "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}"
+             "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}"
              RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
-             "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}")
+             "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}")
 
 if(UNIX)
   get_relative_rpath(${${PYWRAP}_INSTALL_DIR} ${PYWRAP}_INSTALL_RPATH)
diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
index 8d6571d1bade3aec7eced4e65c7feaeb02185771..a65ac2e0287aec6c051f07e046c959a37ee3729a 100644
--- a/unittest/CMakeLists.txt
+++ b/unittest/CMakeLists.txt
@@ -2,31 +2,36 @@
 # Copyright (c) 2014-2019 CNRS Copyright (c) 2018-2024 INRIA
 #
 
-macro(ADD_LIB_UNIT_TEST test)
+function(ADD_LIB_UNIT_TEST test)
   create_ctest_build_tests_target()
+  set(test_target ${PROJECT_NAME}-${test})
 
   if(BUILD_TESTING)
-    add_library(${test} SHARED "${test}.cpp")
-  else(BUILD_TESTING)
-    add_library(${test} SHARED EXCLUDE_FROM_ALL "${test}.cpp")
-  endif(BUILD_TESTING)
-  set_standard_output_directory(${test})
+    add_library(${test_target} SHARED "${test}.cpp")
+  else()
+    add_library(${test_target} SHARED EXCLUDE_FROM_ALL "${test}.cpp")
+  endif()
+  set_standard_output_directory(${test_target})
 
-  target_link_libraries(${test} PUBLIC ${PROJECT_NAME})
-  set_target_properties(${test} PROPERTIES PREFIX "")
+  target_link_libraries(${test_target} PUBLIC ${PROJECT_NAME})
+  set_target_properties(
+    ${test_target}
+    PROPERTIES PREFIX ""
+               LIBRARY_OUTPUT_NAME ${test}
+               RUNTIME_OUTPUT_NAME ${test})
 
-  set_target_properties(${test} PROPERTIES SUFFIX ${PYTHON_EXT_SUFFIX})
+  set_target_properties(${test_target} PROPERTIES SUFFIX ${PYTHON_EXT_SUFFIX})
 
   add_test(
-    NAME ${test}
+    NAME ${test_target}
     COMMAND ${PYTHON_EXECUTABLE} -c "import ${test}"
-    WORKING_DIRECTORY $<TARGET_FILE_DIR:${test}>)
+    WORKING_DIRECTORY $<TARGET_FILE_DIR:${test_target}>)
 
-  add_dependencies(build_tests ${test})
+  add_dependencies(build_tests ${test_target})
   if(NOT BUILD_TESTING)
-    set_tests_properties(${test} PROPERTIES DEPENDS ctest_build_tests)
+    set_tests_properties(${test_target} PROPERTIES DEPENDS ctest_build_tests)
   endif(NOT BUILD_TESTING)
-endmacro(ADD_LIB_UNIT_TEST)
+endfunction()
 
 add_dependencies(build_tests ${PYWRAP})
 add_lib_unit_test(matrix)
@@ -58,17 +63,20 @@ if(CMAKE_CXX_STANDARD GREATER 14 AND CMAKE_CXX_STANDARD LESS 98)
 endif()
 
 function(add_python_lib_unit_test name source)
-  add_python_unit_test(${name} ${source} "lib" "bin")
+  set(test_target ${PROJECT_NAME}-${name})
+  add_python_unit_test(${test_target} ${source} "lib" "bin")
 endfunction()
 
 function(add_python_eigenpy_lib_unit_test name source)
-  add_python_unit_test(${name} ${source} "lib" "bin" "python")
-  set_tests_properties(${name} PROPERTIES DEPENDS ${PYWRAP})
+  set(test_target ${PROJECT_NAME}-${name})
+  add_python_unit_test(${test_target} ${source} "lib" "bin" "python")
+  set_tests_properties(${test_target} PROPERTIES DEPENDS ${PYWRAP})
 endfunction()
 
 function(add_python_eigenpy_unit_test name source)
-  add_python_unit_test(${name} ${source} "python")
-  set_tests_properties(${name} PROPERTIES DEPENDS ${PYWRAP})
+  set(test_target ${PROJECT_NAME}-${name})
+  add_python_unit_test(${test_target} ${source} "python")
+  set_tests_properties(${test_target} PROPERTIES DEPENDS ${PYWRAP})
 endfunction()
 
 function(config_test test tagname opttype)
@@ -80,7 +88,7 @@ function(config_test test tagname opttype)
   configure_file(python/test_${test}.py.in
                  ${CMAKE_CURRENT_BINARY_DIR}/python/${py_file})
   add_lib_unit_test(${MODNAME})
-  set(PYTHON_TEST_NAME "py-${test}-${tagname}")
+  set(PYTHON_TEST_NAME "${PROJECT_NAME}-py-${test}-${tagname}")
   add_test(NAME ${PYTHON_TEST_NAME}
            COMMAND ${PYTHON_EXECUTABLE}
                    "${CMAKE_CURRENT_BINARY_DIR}/python/${py_file}")
diff --git a/unittest/python/test_user_type.py b/unittest/python/test_user_type.py
index 76f8591f81fd3e7f9315796aabfd678bdbb74a77..cb895fc76da205e7fccc6213c070f5573ec938d0 100644
--- a/unittest/python/test_user_type.py
+++ b/unittest/python/test_user_type.py
@@ -67,4 +67,4 @@ test(user_type.CustomFloat)
 
 v = user_type.CustomDouble(1)
 a = np.array(v)
-assert type(v) == a.dtype.type
+assert type(v) is a.dtype.type