У меня есть следующий cmake
файл:
cmake_minimum_required(VERSION 3.5)
project(myapp LANGUAGES C CXX)
find_package(CUDA)
find_library(LIB_LOCATION csv json-c)
INCLUDE(FindCUDA)
list(APPEND CMAKE_PREFIX_PATH /usr/lib /usr/local/lib /usr/local/cuda/lib64)
cuda_add_executable(myapp src/myapp.cu src/ingest/tiles.cpp src/ingest/listings.cpp src/tree.cpp)
target_link_libraries(myapp csv json-c m SFCGAL pthread)
Когда я запускаю команду, она возвращает:
makefile:63: recipe for target 'myapp' failed
/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:576: multiple definition of `main'
./src/myapp.o:/home/user/cuda-workspace/myapp/Default/../src/myapp.cu:83: first defined here
./CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:295: multiple definition of `info_compiler'
./CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp:280: first defined here
./CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:542: multiple definition of `info_platform'
./CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp:527: first defined here
./CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:543: multiple definition of `info_arch'
./CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp:528: first defined here
./CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdC/CMakeCCompilerId.c:561: multiple definition of `info_language_dialect_default'
./CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.o:/home/user/cuda-workspace/myapp/Default/../CMakeFiles/3.10.2/CompilerIdCXX/CMakeCXXCompilerId.cpp:539: first defined here
collect2: error: ld returned 1 exit status
make: *** [myapp] Error 1
Как это возможно, так как единственный main
файл находится в myapp.cu
? Как я могу это исправить?
UPDATE
По-прежнему теряется в этом после нескольких дней вместо того, чтобы сосредоточиться на коде: (
Я внес изменение, перечислив все файлы (.cu, .c, .cpp, .h) в переменную, подобную этой:
SET(SRC_FILES
src/myapp.cu
src/math_ext.h
src/tree_alloc.cu
... etc)
CUDA_ADD_EXECUTABLE(myapp ${SRC_FILES})
MESSAGE (DEBUG ${SRC_FILES})
Сообщение возвращает правильные файлы для компиляции (конечно), но при компиляции все та же проблема, что и на первый взгляд.
В этой ссылке (как предложено) cmake находит более одной основной функции , есть возможность попытаться отделить сборку. Поэтому я даже добавил:
install (DIRECTORY "build" DESTINATION "." DIRECTORY_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE)
или альтернатива
FILE (MAKE_DIRECTORY build)
и выполните команду:
rm -fR CMakeFiles/; cmake --clean-first --build .
но все та же проблема.
ОБНОВЛЕНИЕ 2
Я думаю, что причина этого в том, что он пытается запустить его в Nsight IDE.
В нем должны быть какие-то настройки.