CUDA庫的cmake寫法

2021-10-04 18:00:32 字數 1405 閱讀 8558

cmake_minimum_required(version 3.8 fatal_error)

project(cmake_and_cuda languages cxx cuda)

add_library(particles static

randomize.cpp

randomize.h

particle.cu

particle.h

v3.cu

v3.h

) # 下面選項制定particles庫使用c11特性編譯,這樣所有使用particles庫的其他可執行檔案都因而使用c11編譯

target_compile_features(particles public cxx_std_11)

#下面選項指定particles庫編譯的時候,所依賴的所有cuda檔案之間有關聯,預設必須新增。

set_target_properties( particles

properties cuda_separable_compilation on)

add_executable(particle_test_exe test.cu) #懷疑這裡換成test.cpp也行

set_property(target particle_test_exe

property cuda_separable_compilation on)

target_link_libraries(particle_text_exe private particles)

嚴重警告,cuda_separable_compilation這個選項,cuda是預設不開的,但是100%的程式都要開,因為我們寫的很多cuda**之間是有關聯的,如果不開,那這些cuda**之間,常用的全域性視訊記憶體空間,或者定義的公有變數,或者呼叫其他檔案的成員函式就完全找不到,會報錯的,必須開!!!這就是nvcc中的rdc選項

嚴重警告,cuda_nvcc_flags這個選項,一般還是要加上-std=c++11,不然就算add_compile_options(-std=c++11)開啟了,仍然沒用。這是因為後者針對所有cpp檔案生效,但是不對cu檔案生效,前者只對cu檔案生效

上面其實展示了一種分離編譯的方案,那就是:

先編譯cuda庫本身

使用add_library()命令編譯,或者使用cuda_add_library()命令編譯

對編譯好的程式新增分離編譯允許選項cuda_separable_compilation

然後將cuda庫以外置庫的形式鏈結到普通c++**中。

先使用普通add_executable()編譯其他普通**

使用target_link_libraries()命令鏈結 編譯好的cuda庫和$

CMake構建CUDA專案

在大量的c c 的專案中都使用cmake來進行專案的管理,而cuda又是很流行的平行計算庫,利用cmake來構建cuda專案就顯得很有必要了,而且專案中使用的cmakelists.txt基本框架一致的,下面簡單地記載一下這種cmakelists.txt檔案的內容 cmakelists.txt for...

cmake編譯opencv時指定cuda版本

之前有提問說,基於cmake編譯時如果切換cuda版本,比如我同時裝了cuda8和cuda9,opencv總是找到cuda9,我想用cuda8怎麼辦?實際上,手頭上要配置的工程是基於opencv3.1.0的,這個版本沒有對cuda9.0的支援,與其去改opencv的cmake指令碼原始碼,不如切換一...

cmake 編譯新增庫

xcode 同時需要使用itk o pencv vtk 等庫時,用cmake 解決方法 在你的cmakelist.tst檔案裡新增如下 相應的包,再用cmake生成工程即可 具體寫法如下 新增opencv包 set opencv dir users rf opencv 這裡是你的庫編譯後的位置,裡面...