12

ライブラリを構築するプロジェクトがあり、cuda サポートを追加したいと考えています。

構造は次のとおりです。

|Basedir
|_subdir1
|_subdir2

CMakeLists.txt ファイルの基本構造: (subdir2 は重要ではありません)。
バディルで:

cmake_minimum_required(VERSION 2.6)
PROJECT(myproject)
find_package(CUDA)
INCLUDE_DIRECTORIES(${MYPROJECT_SOURCE_DIR})
ADD_SUBDIRECTORY(subdir1)
ADD_SUBDIRECTORY(subdir2)

サブディレクトリ1:

ADD_LIBRARY(mylib shared
    file1.cpp
    file2.cpp
    file3.cpp
)

INSTALL(
TARGETS mylib
DESTINATION lib
PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_EXECUTE
    WORLD_READ WORLD_EXECUTE
)

FILE(GLOB_RECURSE HEADERS RELATIVE ${MYPROJECT_SOURCE_DIR}/myproject *.h)

FOREACH(HEADER ${HEADERS})
    STRING(REGEX MATCH "(.*)[/\\]" DIR ${HEADER})
    INSTALL(FILES ${HEADER} DESTINATION include/myproject/${DIR})
ENDFOREACH(HEADER)

私は実際にcuda-supportをそれに入れる方法を本当に知りません。file2.cpp を file2.cu に置き換えたいのですが、それを実行しましたが、.cu ファイルはビルドされず、cpp ファイルのみがビルドされました。

cuda ファイルを含めるには CUDA_ADD_EXECUTABLE() を追加する必要がありますか? それを他のファイルにリンクするにはどうすればよいですか?

subdir1 の CMakeLists.txt に以下を追加してみました:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)

これにより、ファイルはコンパイルされますが、実行可能な cuda がビルドされます。それを mylib にリンクするにはどうすればよいですか? だけで?:

TARGET_LINK_LIBRARIES(cuda mylib)

私はcmakeの経験がないことを認めなければなりませんが、あなたはそれを理解したと思います.

4

1 に答える 1

16

CUDA_ADD_LIBRARYプロジェクトに使用できますmylib。これはCUDA_ADD_EXECUTABLE、ライブラリに対してのみ機能します。

CUDA_ADD_LIBRARY(mylib SHARED
    file1.cpp
    file2.cu
    file3.cpp
    OPTIONS -arch sm_20
)

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES})
于 2013-08-18T11:18:55.063 に答える