我正在使用CMake 3.10并且在将编译的库链接到CMake中的测试可执行文件时遇到问题 . 我搜索了很多,发现在早期版本中存在一个问题,你无法在结果可执行文件中链接中间库 . 我无法判断这是否已解决或仍然存在问题 .
我的CMake文件如下所示:
ALGO:
cmake_minimum_required (VERSION 3.9)
project(${MODULE_NAME}_core LANGUAGES CXX CUDA)
add_subdirectory("${core_impl_dir}" implementation)
set(cuda_src "parallel/ParallelComputation.cu")
set(cuda_hdr "parallel/ParallelComputation.h")
add_library(${PROJECT_NAME} STATIC "${cuda_src}" "${cuda_hdr}"
)
target_include_directories (${PROJECT_NAME} PUBLIC "include/"
"parallel/"
)
source_group("parallel" FILES "${cuda_src}" "${cuda_hdr}")
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})
测试:
project(${MODULE_NAME}_gtest LANGUAGES CXX CUDA)
add_subdirectory("${gtest_impl_dir}" implementation)
add_executable(${PROJECT_NAME} "${gtest_impl_src}")
target_link_libraries(${PROJECT_NAME} ${MODULE_NAME}_core)
enable_testing()
find_package(GTest REQUIRED)
include_directories("${GTEST_INCLUDE_DIRS}")
target_link_libraries(${PROJECT_NAME} ${GTEST_BOTH_LIBRARIES})
source_group("Implementation\\Source Files" FILES "${gtest_impl_src}" )
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})
add_test(${PROJECT_NAME} ${PROJECT_NAME})
构建Algo工作正常,但在构建Test时,我会得到链接错误
../mpleration/libmatrix1_testCuda_core.a(ParallelComputation.cu.o):在Funktion'cudaError cudaMalloc(float **,unsigned long)':tmpxft_00005ad0_00000000-5_ParallelComputation.cudafe1.cpp :( . text 0x4f2):未定义的引用'cudaMalloc “
编辑使用 make VERBOSE=1
我得到了这个链接命令:
/ usr / bin / c -Wl, - no-as-needed -pthread -g -std = c 14 -Wall CMakeFiles / matrix1_testCuda_gtest.dir // tests / eclipseProject / algos / testCuda / test / src / main.cpp .o CMakeFiles / matrix1_testCuda_gtest.dir / cmake_device_link.o -o matrix1_testCuda_gtest ../implementation/libmatrix1_testCuda_core.a /usr/lib/libgtest.a /usr/lib/libgtest_main.a
1 回答
我打电话给这个工作
在两个CMake文件中 . 此外,在Algo文件(包含设备代码)中,我必须这样做
我期待CUDA的语言支持会使这些步骤变得不必要,但显然不是 .