5.8.7.2 : Le CMakeLists.txt

Écrivons le CMakeLists.txt :

On change les options de compilation (sur GPU ou pas) :
1
2
3
4
5
if(GPU_MODE)
	set(CMAKE_CXX_FLAGS "-stdpar=gpu -O1 -Wall -std=c++17 -g")
else(GPU_MODE)
	set(CMAKE_CXX_FLAGS "-O3 -Wall -std=c++17 -g")
endif(GPU_MODE)


L'utilisation de CMAKE_CXX_FLAGS n'est pas anecdotique. Car lors d'une utilisation GPU l'option -stdpar doit être utilisée également lors du linkage. D'une manière générale, si vous avez une erreur de linkage où des fonctions Cuda ne sont pas trouvées, c'est qu'il manque un -stdpar au linkage de votre programme. On créé notre programme qui utilisera notre bibliothque de calcul avec nvc++ :
1
add_executable(gray_scott_gpu_nvcpp_vector main.cpp gray_scott_nvcpp.cpp)


Enfin on ajoute les dépendences de notre programme (sur GPU ou pas) :
1
2
3
4
5
6
7
8
9
if(GPU_MODE)
	target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES})
else()
	target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES} TBB::tbb)
endif()

if(NOT MUST_JOB)
	add_subdirectory(GrayScott2Pic)
endif()


Le fichier CMakeLists.txt complet :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(GPU_MODE)
	set(CMAKE_CXX_FLAGS "-stdpar=gpu -O1 -Wall -std=c++17 -g")
else(GPU_MODE)
	set(CMAKE_CXX_FLAGS "-O3 -Wall -std=c++17 -g")
endif(GPU_MODE)
add_executable(gray_scott_gpu_nvcpp_vector main.cpp gray_scott_nvcpp.cpp)

if(GPU_MODE)
	target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES})
else()
	target_link_libraries(gray_scott_gpu_nvcpp_vector gray_scott_data_format option_parser string_utils ${HDF5_CXX_LIBRARIES} TBB::tbb)
endif()

if(NOT MUST_JOB)
	add_subdirectory(GrayScott2Pic)
endif()


Vous pouvez le télécharger ici.