diff --git a/utils/api_demos/CMakeLists.txt b/utils/api_demos/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e88d1cb56b3414603d2871187cb947ad0f09c5fe
--- /dev/null
+++ b/utils/api_demos/CMakeLists.txt
@@ -0,0 +1,43 @@
+cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
+
+project(api_demos CXX)
+
+add_subdirectory(../.. "${CMAKE_CURRENT_BINARY_DIR}/gmsh")
+
+include_directories(../../Common ../../Numeric ../../Geo ../../Mesh 
+   ../../Solver ../../Post ../../Plugin ../../Graphics 
+   ../../contrib/DiscreteIntegration ${GMSH_EXTERNAL_INCLUDE_DIRS}
+   ${CMAKE_CURRENT_BINARY_DIR}/gmsh/Common)
+
+if(APPLE)
+  set(glut "-framework GLUT")
+else(APPLE)
+  set(glut "glut")
+endif(APPLE)
+
+add_executable(mainAntTweakBar mainAntTweakBar.cpp)
+target_link_libraries(mainAntTweakBar shared AntTweakBar ${glut})
+
+add_executable(mainCartesian mainCartesian.cpp)
+target_link_libraries(mainCartesian shared)
+
+add_executable(mainElasticity mainElasticity.cpp)
+target_link_libraries(mainElasticity shared)
+
+add_executable(mainGlut mainGlut.cpp)
+target_link_libraries(mainGlut shared ${glut})
+
+add_executable(mainHomology mainHomology.cpp)
+target_link_libraries(mainHomology shared)
+
+add_executable(mainLevelset mainLevelset.cpp)
+target_link_libraries(mainLevelset shared)
+
+add_executable(mainOcc mainOcc.cpp)
+target_link_libraries(mainOcc shared)
+
+add_executable(mainPost mainPost.cpp)
+target_link_libraries(mainPost shared)
+
+add_executable(mainSimple mainSimple.cpp)
+target_link_libraries(mainSimple shared)
diff --git a/utils/api_demos/Makefile b/utils/api_demos/Makefile
deleted file mode 100644
index 5089196224023e66692844abd7eb23370d9c5154..0000000000000000000000000000000000000000
--- a/utils/api_demos/Makefile
+++ /dev/null
@@ -1,48 +0,0 @@
-FLAGS = -g -O2 ${CXXFLAGS}
-INC = -I/usr/local/include -I. -I /home/gauthier/distgmsh/trunk/buildlib/lib/include
-GMSH = -L/home/gauthier/distgmsh/trunk/buildlib/lib/lib -lGmsh
-METIS= -L/usr/local/lib -lmetis
-GLUT = -framework OpenGL -framework GLUT -framework Cocoa -framework ApplicationServices
-#GLUT = -lGLUT -lGLU -lGL -lX11
-OCC = -L/usr/local/opencascade/lib -L/Users/remacle/SOURCES/opencascade/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKIGES -lTKXSBase -lTKOffset -lTKFeat -lTKFillet -lTKBool -lTKShHealing -lTKMesh -lTKHLR -lTKBO -lTKPrim -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKAdvTools -lTKMath -lTKernel
-TAUCS = -L/Users/remacle/SOURCES/gmsh/contrib/taucs/lib -L/home/gaetan/develop/gmsh/contrib/taucs/lib/linux -ltaucs
-
-mainLua: mainLua.cpp
-	g++ ${FLAGS} -I../../Geo/ -I../../lib/Common -I../../Common -DHAVE_LUA -o mainLua ${INC} mainLua.cpp\
-          ${GMSH} -llapack -lblas -lm ${TAUCS} ${OCC} -llua
-
-mainElasticity: mainElasticity.cpp
-	g++ ${FLAGS} -o mainElasticity ${INC} mainElasticity.cpp\
-          ${GMSH} -llapack -lblas -lm -lmetis ${TAUCS}
-
-mainFDPlate: mainFDPlate.cpp
-	g++ ${FLAGS} -o mainFDPlate ${INC} mainFDPlate.cpp\
-          ${GMSH} -llapack -lblas -lm ${TAUCS} ${OCC}
-
-mainCartesian: mainCartesian.cpp
-	g++ ${FLAGS} -o mainCartesian ${INC} mainCartesian.cpp\
-          ${GMSH} -llapack -lblas -lm ${OCC} ${GLUT}
-
-mainSimple: mainSimple.cpp
-	g++ ${FLAGS} -o mainSimple ${INC} mainSimple.cpp\
-          ${GMSH} -llapack -lblas -lm
-
-mainAntTweakBar: mainAntTweakBar.cpp
-	g++ ${FLAGS} -o mainAntTweakBar ${INC} mainAntTweakBar.cpp\
-          ${GMSH} -lAntTweakBar ${GLUT} -llapack -lblas -lz -lm
-
-mainGlut: mainGlut.cpp
-	g++ ${FLAGS} -o mainGlut ${INC} mainGlut.cpp\
-          ${GMSH} ${GLUT} -llapack -lblas -lz -lm
-
-mainPost: mainPost.cpp
-	g++ ${FLAGS} -o mainPost ${INC} mainPost.cpp\
-          ${GMSH} -llapack -lblas -lm
-
-mainLevelset: mainLevelset.cpp
-	g++ ${FLAGS} -o mainLevelset ${INC} mainLevelset.cpp\
-          ${GMSH} -llapack -lblas -lm -lmetis ${TAUCS}
-
-clean:
-	rm -rf mainSimple mainAntTweakBar mainGlut mainPost mainLevelset\
-              *.dSYM *.msh *.pos
diff --git a/utils/api_demos/mainCartesian.cpp b/utils/api_demos/mainCartesian.cpp
index ed1057e39ed223931251b097a0f2377051d9194e..c795d42e740776cd0a74ed691665c32d8d0b3ea2 100644
--- a/utils/api_demos/mainCartesian.cpp
+++ b/utils/api_demos/mainCartesian.cpp
@@ -31,7 +31,7 @@ void test()
   double x,y,z=-1;
   scanf ("%lf",&z);
   printf(" z = %g\n",z);
-  std::vector<SPoint3> v;
+  std::vector<SPoint3> v, pts;
   std::vector<double> d;
 
   for (int i=0;i<100;i++){
@@ -41,7 +41,7 @@ void test()
       v.push_back(SPoint3(4.3,x,y));
     }
   }
-  signedDistancesPointsTriangle (d,v,SPoint3(4,0,0),SPoint3(4,1,0),SPoint3(4,0,1));
+  signedDistancesPointsTriangle (d,v,pts,SPoint3(4,0,0),SPoint3(4,1,0),SPoint3(4,0,1));
   
   FILE *f = fopen ("chitte.pos","w");
   fprintf(f,"View \"\"{\n");
@@ -80,7 +80,7 @@ int main (int argc,char *argv[])
   
   printf("mesh read\n");
   
-  std::vector<SPoint3> POINTS;
+  std::vector<SPoint3> POINTS, dummy;
   std::vector<SVector3> NORMALS;
 
   for (GModel::fiter fit = gm->firstFace(); fit != gm->lastFace(); fit++){
@@ -166,9 +166,9 @@ int main (int argc,char *argv[])
       //      printf("N1 %g %g %g N2 %g %g %g -- %g %g %g -- %g %g %g -- %g %g %g\n",N.x(),N.y(),N.z(),NN.x(),NN.y(),NN.z(),
       //             p1.x(),p1.y(),p1.z(),p2.x(),p2.y(),p2.z(),p3.x(),p3.y(),p3.z());
       if (dot(NN, N) > 0)
-        signedDistancesPointsTriangle (localdist,NODES,P1,P2,P3);
+        signedDistancesPointsTriangle (localdist,NODES,dummy,P1,P2,P3);
       else
-        signedDistancesPointsTriangle (localdist,NODES,P2,P1,P3);
+        signedDistancesPointsTriangle (localdist,NODES,dummy,P2,P1,P3);
 
       if(1){
         if (dist.empty())dist=localdist;