Как исправить конфигурацию CMake для создания Makefile без нескольких основных ошибок определения? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующий 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.

В нем должны быть какие-то настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...