diff --git a/gtsam/config.h.in b/gtsam/config.h.in
index d47329a..cd18947 100644
--- a/gtsam/config.h.in
+++ b/gtsam/config.h.in
@@ -22,13 +22,12 @@
 #define GTSAM_VERSION_MINOR @GTSAM_VERSION_MINOR@
 #define GTSAM_VERSION_PATCH @GTSAM_VERSION_PATCH@
 #define GTSAM_VERSION_NUMERIC @GTSAM_VERSION_NUMERIC@
 #define GTSAM_VERSION_STRING "@GTSAM_VERSION_STRING@"
 
 // Paths to example datasets distributed with GTSAM
-#define GTSAM_SOURCE_TREE_DATASET_DIR "@GTSAM_SOURCE_DIR@/examples/Data"
 #define GTSAM_INSTALLED_DATASET_DIR "@GTSAM_TOOLBOX_INSTALL_PATH@/gtsam_examples/Data"
 
 // Whether GTSAM is compiled to use quaternions for Rot3 (otherwise uses rotation matrices)
 #cmakedefine GTSAM_USE_QUATERNIONS
 
 // Whether GTSAM is compiled to use Pose3::EXPMAP as the default coordinates mode for Pose3's retract and localCoordinates (otherwise, Pose3::FIRST_ORDER will be used)
diff --git a/gtsam/nonlinear/tests/testSerializationNonlinear.cpp b/gtsam/nonlinear/tests/testSerializationNonlinear.cpp
index f402656..ef1f824 100644
--- a/gtsam/nonlinear/tests/testSerializationNonlinear.cpp
+++ b/gtsam/nonlinear/tests/testSerializationNonlinear.cpp
@@ -150,14 +150,21 @@ TEST(Serialization, NoiseModelFactor1_backwards_compatibility) {
   PriorFactor<Pose3> factor_deserialized_str = PriorFactor<Pose3>();
   deserializeFromString(serialized_str, factor_deserialized_str);
   EXPECT(assert_equal(factor, factor_deserialized_str));
 
   // Deserialize XML
   PriorFactor<Pose3> factor_deserialized_xml = PriorFactor<Pose3>();
-  deserializeFromXMLFile(GTSAM_SOURCE_TREE_DATASET_DIR
-                         "/../../gtsam/nonlinear/tests/priorFactor.xml",
+
+  const char* GTSAM_SOURCE_TREE_DATASET_DIR = getenv("GTSAM_SOURCE_TREE_DATASET_DIR");
+  if(GTSAM_SOURCE_TREE_DATASET_DIR == NULL)
+  {
+      FAIL("GTSAM_SOURCE_TREE_DATASET_DIR environment variable must be defined");
+  }
+
+  std::string priorFactor_xml = std::string(GTSAM_SOURCE_TREE_DATASET_DIR) + "/../../gtsam/nonlinear/tests/priorFactor.xml";
+  deserializeFromXMLFile(priorFactor_xml                         ,
                          factor_deserialized_xml);
   EXPECT(assert_equal(factor, factor_deserialized_xml));
 #endif
 }
 
 TEST(Serialization, ISAM2) {
diff --git a/gtsam/slam/dataset.cpp b/gtsam/slam/dataset.cpp
index 9cb12ae..9d577fc 100644
--- a/gtsam/slam/dataset.cpp
+++ b/gtsam/slam/dataset.cpp
@@ -61,13 +61,15 @@ namespace gtsam {
 /* ************************************************************************* */
 string findExampleDataFile(const string &name) {
   // Search source tree and installed location
   vector<string> rootsToSearch;
 
   // Constants below are defined by CMake, see gtsam/gtsam/CMakeLists.txt
-  rootsToSearch.push_back(GTSAM_SOURCE_TREE_DATASET_DIR);
+  const char* GTSAM_SOURCE_TREE_DATASET_DIR = getenv("GTSAM_SOURCE_TREE_DATASET_DIR");
+  if(GTSAM_SOURCE_TREE_DATASET_DIR != NULL)
+      rootsToSearch.push_back(GTSAM_SOURCE_TREE_DATASET_DIR);
   rootsToSearch.push_back(GTSAM_INSTALLED_DATASET_DIR);
 
   // Search for filename as given, and with .graph and .txt extensions
   vector<string> namesToSearch;
   namesToSearch.push_back(name);
   namesToSearch.push_back(name + ".graph");
@@ -84,13 +86,13 @@ string findExampleDataFile(const string &name) {
     }
   }
 
   // If we did not return already, then we did not find the file
   throw invalid_argument(
       "gtsam::findExampleDataFile could not find a matching "
-      "file in\n" GTSAM_SOURCE_TREE_DATASET_DIR
+      "file in\n" + std::string(GTSAM_SOURCE_TREE_DATASET_DIR ? GTSAM_SOURCE_TREE_DATASET_DIR : "") +
       " or\n" GTSAM_INSTALLED_DATASET_DIR " named\n" +
       name + ", " + name + ".g2o, " + ", " + name + ".graph, or " + name +
       ".txt");
 }
 
 /* ************************************************************************* */
diff --git a/cmake/GtsamTesting.cmake b/cmake/GtsamTesting.cmake
index 573fb69..47d1c59 100644
--- a/cmake/GtsamTesting.cmake
+++ b/cmake/GtsamTesting.cmake
@@ -171,12 +171,15 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries)
 
 				# Apply user build flags from CMake cache variables:
 				gtsam_apply_build_flags(${script_name})
 
 				# Add target dependencies
 				add_test(NAME ${script_name} COMMAND ${script_name})
+				set_tests_properties(${script_name} PROPERTIES ENVIRONMENT
+                                                     GTSAM_SOURCE_TREE_DATASET_DIR=${CMAKE_SOURCE_DIR}/examples/Data)
+
 				add_dependencies(check.${groupName} ${script_name})
 				add_dependencies(check ${script_name})
 				add_dependencies(all.tests ${script_name})
 				if(NOT MSVC AND NOT XCODE_VERSION)
 					# Regular test run:
 					add_custom_target(${script_name}.run
@@ -225,12 +228,14 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries)
 			set(rest_script_srcs ${script_srcs})
 			list(REMOVE_AT rest_script_srcs 0)
 			set_property(SOURCE ${rest_script_srcs} APPEND PROPERTY COMPILE_DEFINITIONS "main=inline no_main")
 
 			# Add target dependencies
 			add_test(NAME ${target_name} COMMAND ${target_name})
+			set_tests_properties(${target_name} PROPERTIES ENVIRONMENT
+			                     GTSAM_SOURCE_TREE_DATASET_DIR=${CMAKE_SOURCE_DIR}/examples/Data)
 			add_dependencies(check.${groupName} ${target_name})
 			add_dependencies(check ${target_name})
 			if(NOT XCODE_VERSION)
 				add_dependencies(all.tests ${target_name})
 			endif()
 
