Я только что скачал CUDA 5.5, установленный под Mac OSX 10.8.5, с Xcode 5.0.2 и обновил инструменты командной строки в Xcode. Но я не смог получить образец CUDA «nbody» для компиляции. Я получал всевозможные смешные сообщения об ошибках, например
clang error: unsupported option '-dumpspecs'
Я думал, что решил этот вопрос с помощью некоторых других веб-страниц, но затем другие проблемы продолжали ползти (например, GLEW не найден, CUDA sample path undefined, .. .). (И предоставленные make-файлы и файлы cmake выглядели просто слишком надуманными, так что я не мог найти ошибку.)
Итак, я перевернул собственный файл makefile. Я размещаю его здесь, в надежде, что это может помочь другим сэкономить несколько часов.
#!/usr/bin/make -R
# Simple Makefile for a CUDA sample program
# (because the provided ones don't work! :-()
#
# We assume that all files in this directory produce one executable.
# Set your GPU version in variable NVCC below
#
# Developed and tested under Mac OS X 10.8.5;
# under Linux, you probably need to adjust a few paths, compiler options, and #ifdef's.
#
# Prerequisites:
# - CUDA 5.5
# - The "Command Line Tools" installed via XCode 5
# - DYLD_FALLBACK_LIBRARY_PATH or DYLD_LIBRARY_PATH must include
# /Developer/NVIDIA/CUDA-5.5/lib:/Developer/NVIDIA/CUDA-5.5/samples/common/lib/darwin
#
# GZ Dec 2013
# -------- variables and settings ---------
#
CUDA := /Developer/NVIDIA/CUDA-5.5
NVCC := nvcc -ccbin /usr/bin/clang -arch=sm_30 --compiler-options -Wall,-ansi,-Wno-extra-tokens
# -ccbin /usr/bin/clang is needed with XCode 5 under OSX 10.8
# -arch=sm_30 is needed for my laptop (it does not provide sm_35)
INCFLAGS := -I $(CUDA)/samples/common/inc
TARGET := nbody
OBJDIR := obj
MAKEFLAGS := kR
.SUFFIXES: .cu .cpp .h
ALLSOURCES := $(wildcard *.cu *.cpp)
ALLFILES := $(basename $(ALLSOURCES))
ALLOBJS := $(addsuffix .o,$(addprefix $(OBJDIR)/,$(ALLFILES)))
DEPDIR := depend
# --------- automatic targets --------------
.PHONY: all
all: $(OBJDIR) $(DEPDIR) $(TARGET)
@true
$(OBJDIR):
mkdir [email protected]
# --------- generic rules --------------
UNAME = $(shell uname)
ifeq ($(UNAME), Darwin) # Mac OS X
# OpenGL and GLUT are frameworks
LDFLAGS = -Xlinker -framework,OpenGL,-framework,GLUT,-L,$(CUDA)/samples/common/lib/darwin,-lGLEW
endif
$(TARGET): $(ALLOBJS)
$(NVCC) $^ $(LDFLAGS) -o [email protected]
$(OBJDIR)/%.o: %.cu
$(NVCC) -c $(INCFLAGS) $ [email protected]
$(DEPDIR)/%.d : %.cpp $(DEPDIR)
@echo creating dependencies for $ [email protected]
$(DEPDIR):
mkdir [email protected]
# ------ administrative stuff -------
.PHONY: clean
clean:
rm -f *.o $(TARGET)
rm -rf $(DEPDIR) $(OBJDIR)
echo:
@echo $(ALLSOURCES)
@echo $(ALLFILES)
@echo $(ALLOBJS)
Это делает это, но мне кажется, что новая проблема возникает на 10,9 и Xcode 5: по умолчанию STDLIB теперь LibC++, который, кажется, производит новые ошибки с nvcc. Поэтому вам также нужно добавить флаг '-stdlib = libstdC++ '(через -Xcompiler, если он указан непосредственно в nvcc) – kamjagin