diff --git a/Modules/Learning/Sampling/include/otbSampleAugmentation.h b/Modules/Learning/Sampling/include/otbSampleAugmentation.h
index 84e67ffdd413940e2646ff2f35d6423241ab5f3f..8196b3e9da759e330f6a652a13377b9f609e0d57 100644
--- a/Modules/Learning/Sampling/include/otbSampleAugmentation.h
+++ b/Modules/Learning/Sampling/include/otbSampleAugmentation.h
@@ -21,6 +21,10 @@
 #ifndef otbSampleAugmentation_h
 #define otbSampleAugmentation_h
 
+#ifdef _OPENMP
+ # include <omp.h>
+#endif
+
 #include <vector>
 #include <algorithm>
 #include <random>
@@ -49,7 +53,9 @@ SampleType EstimateStds(const SampleVectorType& samples)
   for(size_t i=0; i<nbSamples; ++i)
     {
     auto norm_factor = 1.0/(i+1);
-#pragma omp parallel for 
+#ifdef _OPENMP
+#pragma omp parallel for
+#endif 
     for(size_t j=0; j<nbComponents; ++j)
       {
       const auto mu = means[j];
@@ -59,7 +65,9 @@ SampleType EstimateStds(const SampleVectorType& samples)
       means[j] = muNew;
       }
     }
+#ifdef _OPENMP
 #pragma omp parallel for
+#endif
   for(size_t j=0; j<nbComponents; ++j)
     {
     stds[j] = std::sqrt(stds[j]/nbSamples);
@@ -77,7 +85,9 @@ void ReplicateSamples(const SampleVectorType& inSamples,
 {
   newSamples.resize(nbSamples);
   size_t imod{0};
+#ifdef _OPENMP
 #pragma omp parallel for
+#endif
   for(size_t i=0; i<nbSamples; ++i)
     {
     if (imod == inSamples.size()) imod = 0;
@@ -108,14 +118,18 @@ void JitterSamples(const SampleVectorType& inSamples,
   // have different stds
   auto stds = EstimateStds(inSamples);
   std::vector<std::normal_distribution<double>> gaussDis(nbComponents);
+#ifdef _OPENMP
 #pragma omp parallel for
+#endif
   for(size_t i=0; i<nbComponents; ++i)
     gaussDis[i] = std::normal_distribution<double>{0.0, stds[i]/stdFactor};
 
   for(size_t i=0; i<nbSamples; ++i)
     {
     newSamples[i] = inSamples[std::rand()%inSamples.size()];
+#ifdef _OPENMP
 #pragma omp parallel for
+#endif
     for(size_t j=0; j<nbComponents; ++j)
       newSamples[i][j] += gaussDis[j](gen);
     }
@@ -157,7 +171,9 @@ void FindKNNIndices(const SampleVectorType& inSamples,
 {
   const auto nbSamples = inSamples.size();
   nnVector.resize(nbSamples);
+  #ifdef _OPENMP
   #pragma omp parallel for
+  #endif
   for(size_t sampleIdx=0; sampleIdx<nbSamples; ++sampleIdx)
     {
     NNIndicesType nns;
@@ -200,7 +216,9 @@ void Smote(const SampleVectorType& inSamples,
   FindKNNIndices(inSamples, nbNeighbors, nnVector);
   // The input samples are selected randomly with replacement
   std::srand(seed);
+  #ifdef _OPENMP
   #pragma omp parallel for
+  #endif
   for(size_t i=0; i<nbSamples; ++i)
     {
     const auto sampleIdx = std::rand()%(inSamples.size());