【发布时间】:2015-11-04 03:17:47
【问题描述】:
我在使用cmake 和make 编译我的应用程序时遇到问题。项目的源文件组织如下:
SOURCE/
CMakeLists.txt
myApp.cc
include/
classA.hh
classB.hh
src/
classA.cc
classB.cc
classB.cu
我的 CMakeLists.txt 文件如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(myApp)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
FIND_PACKAGE(GDCM REQUIRED)
IF(GDCM_FOUND)
INCLUDE(${GDCM_USE_FILE})
SET(GDCM_LIBRARIES gdcmCommon vtkgdcm)
ELSE(GDCM_FOUND)
MESSAGE(FATAL_ERROR "Cannot find GDCM, did you set GDCM_DIR?")
ENDIF(GDCM_FOUND)
SET(CUDA_TOOLKIT_ROOT_DIR="/Developer/NVIDIA/CUDA-7.5/")
FIND_PACKAGE(CUDA REQUIRED)
SET(CUDA_PROPAGATE_HOST_FLAGS ON)
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30)
SET(LIB_TYPE SHARED)
SET(CUDA_SEPARABLE_COMPILATION ON)
LINK_DIRECTORIES(/lib/FFTW/INSTALL/lib)
INCLUDE_DIRECTORIES(/lib/FFTW/INSTALL/include)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
FILE(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
FILE(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
FILE(GLOB cudafile ${PROJECT_SOURCE_DIR}/src/*.cu)
CUDA_ADD_EXECUTABLE(myApp myApp ${headers} ${sources} ${cudafile})
TARGET_LINK_LIBRARIES(myApp ${VTK_LIBRARIES} ${GDCM_LIBRARIES} fftw3)
当我尝试使用 make 编译项目时(成功运行 cmake 后)我得到:
nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified
CMake Error at myApp_generated_classB.cu.o.cmake:207 (message):
Error generating
../BUILD/CMakeFiles/myApp.dir/src/./myApp_generated_classB.cu.o
将一个类的源文件分解成 .cc 和 .cu 文件有问题吗?
【问题讨论】:
-
感谢您的评论。我已经看过那个帖子了。我遇到了同样的错误,但可能是出于不同的原因。问题是使用“-”还是“-”。看来我的错误源于“../BUILD/CMakeFiles/myApp.dir/src/./myApp_generated_classB.cu.o”。
-
正在执行的
nvcc命令是什么?例如,该问题显示了用于执行编译器的所有选项。 -
请发布
make VERBOSE=1的输出,显示编译器是如何被调用的 -
@JamesAdkison,nvcc 是 CUDA 编译器。请参阅docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#axzz3q4yZJSVq。