- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 CMake 来交叉编译程序,但它失败并显示以下消息:
/bin/sh: 1: Syntax error: ";;" unexpected
cmake_minimum_required(VERSION 3.9)
project(my_target LANGUAGES CUDA CXX C)
include(CheckLanguage)
check_language(CUDA)
# STD
if (NOT DEFINED CMAKE_CUDA_STANDARD)
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
endif()
find_package(Poco REQUIRED Foundation Util)
# Flags
set (
CMAKE_C_STANDARD 11
)
set(
CMAKE_CXX_STANDARD 11
)
set(
CMAKE_C_FLAGS
${CMAKE_C_FLAGS}
-c -Wall -fopenmp
)
set(
CMAKE_CXX_FLAGS
${CMAKE_CXX_FLAGS}
-c -Wall -fopenmp
)
set(
CMAKE_CUDA_FLAGS
${CMAKE_NVCC_FLAGS}
--ccbin $(CMAKE_CXX_COMPILER) -O2 -gencode -std=c++11 -dc -Werror deprecated-declarations
)
# Compile Objects
file(GLOB_RECURSE src_c src/*.c )
file(GLOB_RECURSE src_cpp src/*.cpp)
file(GLOB_RECURSE src_cu src/*.cu )
file(GLOB_RECURSE src_h src/*.h )
add_library(cobjs STATIC ${src_c} ${src_h} )
add_library(cppobjs STATIC ${src_cpp} ${src_h})
add_library(cuobjs STATIC ${src_cu} ${src_h} )
target_compile_options(cobjs PUBLIC ${CMAKE_C_FLAGS} )
target_compile_options(cppobjs PUBLIC ${CMAKE_CXX_FLAGS})
target_compile_options(cuobjs PUBLIC ${CMAKE_NVCC_FLAGS})
set_target_properties( cuobjs
PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
add_executable(my_target
${cobjs} ${cppobjs} ${cuobjs}
${src_h}
)
# Include Dirs
target_include_directories(cobjs PUBLIC
include src
)
target_include_directories(cppobjs PUBLIC
include src
)
target_include_directories(cuobjs PUBLIC
include src
)
target_include_directories(my_target PUBLIC
include src
)
link_directories(
${POCO_HOME}
${METIS_HOME}
)
target_link_libraries(my_target PUBLIC
cobjs
cppobjs
cuobjs
-lPocoFoundation
-lPocoUtil
-lpthread
-lgomp
-lmetis
)
#===============================================================================
CUDA_PATH := /usr/local/cuda
METIS_PATH := ${METIS_HOME}
POCO_PATH := ${POCO_HOME}
# D-debug R-release
COMPILEMD := R
EXE := coupled.exe
CC := gcc
CXX := g++
#===============================================================================
DIR_BIN := bin
DIR_SRC := src
CCFLAGS := -Iinclude -I$(DIR_SRC) -std=c11 -c -Wall -fopenmp
CXXFLAGS := -I$(CUDA_PATH)/include -I$(METIS_PATH)/include -I$(POCO_PATH)/include -Iinclude -I$(DIR_SRC) -std=c++11 -c -Wall -fopenmp
NVCCFLAGS := -I$(POCO_PATH)/include -I$(DIR_SRC) -std=c++11 -dc -Werror deprecated-declarations
LDFLAGS := -L$(METIS_PATH)/lib -lmetis -L$(POCO_PATH)/lib -lPocoUtil -lPocoFoundation -Llib -ltecio -lpthread -lgomp
BASENM := $(basename $(EXE))
SUFFIX := $(suffix $(EXE))
SRC_C := $(shell find $(DIR_SRC) -name *.c)
SRC_CPP := $(shell find $(DIR_SRC) -name *.cpp)
SRC_CU := $(shell find $(DIR_SRC) -name *.cu)
OBJ_C := $(SRC_C:%.c=%.o)
OBJ_CPP := $(SRC_CPP:%.cpp=%.o)
OBJ_CU := $(SRC_CU:%.cu=%.o)
ifeq ($(COMPILEMD), D)
CCFLAGS += -D_DEBUG -g
CXXFLAGS += -D_DEBUG -g
NVCCFLAGS += -D_DEBUG -g -G
else ifeq ($(COMPILEMD), R)
CCFLAGS += -DNDEBUG -O2
CXXFLAGS += -DNDEBUG -O2
NVCCFLAGS += -DNDEBUG -O2
else
$(error error COMPILEMD($(COMPILEMD)))
endif
CCFLAGS += -DKS_FP_DOUBLE -march=native
CXXFLAGS += -DKS_FP_DOUBLE -march=native
NVCCFLAGS += -DKS_FP_DOUBLE
BASENM := $(BASENM)DP$(COMPILEMD)
ifeq ($(SRC_CU), )
LD := $(CXX)
else
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(CXX)
DEVICE_SM := 50 52 60 61 #70 75
$(foreach SM,$(DEVICE_SM),$(eval NVCCFLAGS += -gencode arch=compute_$(SM),code=sm_$(SM)))
$(foreach SM,$(DEVICE_SM),$(eval LDFLAGS += -gencode arch=compute_$(SM),code=sm_$(SM)))
LD := $(NVCC)
endif
OBJ := $(OBJ_C) $(OBJ_CPP) $(OBJ_CU)
EXE := $(DIR_BIN)/$(BASENM)$(SUFFIX)
#===============================================================================
all: $(EXE)
.PHONY: all clean cleanall
$(EXE): $(OBJ)
@mkdir -p $(DIR_BIN)
$(LD) $^ $(LDFLAGS) -o $@
$(OBJ_C): %.o: %.c
$(CC) $< $(CCFLAGS) -o $@
$(OBJ_CPP): %.o: %.cpp
$(CXX) $< $(CXXFLAGS) -o $@
$(OBJ_CU): %.o: %.cu
$(NVCC) $< $(NVCCFLAGS) -o $@
clean:
-rm -rf $(OBJ) $(EXE)
cleanall:
-rm -rf $(OBJ) $(DIR_BIN)/*log $(DIR_BIN)/*.exe $(DIR_BIN)/*.dat
/bin/sh: 1: Syntax error: ";;" unexpected
问题。但是我收到了一个新错误,上面写着:
c++: fatal error: no input files
build.make
文件错误行写道:
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o <path-to-my-cpp>/my.cpp.o -c <path-to-my-cpp>/my.cpp
-c
标记到 C 和 C++ 编译器,因此无需手动添加。 add_compile_options()
添加编译标志比 set(CMAKE_<LANG>_FLAGS ...)
. link_directories
应该总是走在 add_library()
之前和 add_executable()
.一种现代方法是使用 find_library()
,见 here . add_executable()
中。 . CMake 似乎完美地处理了不同的情况。 cmake_minimum_required(VERSION 3.9)
project(my_target LANGUAGES CUDA CXX C)
# STD
if (NOT DEFINED CMAKE_CUDA_STANDARD)
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
endif()
find_package(Poco REQUIRED Foundation Util)
# Flags
set (
CMAKE_C_STANDARD 11
)
set(
CMAKE_CXX_STANDARD 11
)
# Compile Objects
file(GLOB_RECURSE src_c src/*.c )
file(GLOB_RECURSE src_cpp src/*.cpp)
file(GLOB_RECURSE src_cu src/*.cu )
file(GLOB_RECURSE src_h src/*.h )
# message(STATUS "src_c = ${src_c}" )
# message(STATUS "src_cpp = ${src_cpp}")
# message(STATUS "src_cu = ${src_cu}" )
# message(STATUS "src_h = ${src_h}" )
add_definitions(-DKS_FP_DOUBLE)
link_directories(
${POCO_HOME}
${METIS_HOME}
)
add_executable(my_target
${src_c}
${src_cpp}
${src_cu}
${src_h}
)
# Include Dirs
target_include_directories(my_target PUBLIC
include src
)
set_target_properties(my_target
PROPERTIES CUDA_SEPARABLE_COMPILATION ON
)
target_link_libraries(my_target PUBLIC
# cobjs
# cppobjs
# cuobjs
-lPocoFoundation
-lPocoUtil
-lpthread
-lgomp
-lmetis
)
最佳答案
当您设置 CMake 编译器标志变量(或任何其他 CMake 变量)时,您不需要插入分号 ;
分隔参数/标志。 CMake 将识别 set()
中的换行符和空格为您指挥和处理。从文档:
Multiple arguments will be joined as a semicolon-separated list to form the actual variable value to be set.
set(
CMAKE_C_FLAGS
${CMAKE_C_FLAGS}
-c -Wall -fopenmp
)
set(
CMAKE_CXX_FLAGS
${CMAKE_CXX_FLAGS}
-c -Wall -fopenmp
)
set(
CMAKE_CUDA_FLAGS
${CMAKE_NVCC_FLAGS}
--ccbin $(CMAKE_CXX_COMPILER) -O2 -gencode -std=c++11 -dc -Werror deprecated-declarations
)
add_executable()
命令仅将源文件作为参数。您不能使用先前定义的目标作为参数。尝试修改您对
add_executable()
的调用;您已经通过调用
add_library()
将 C、C++ 和 Cuda 源代码编译为静态库。 ,所以也许只有一个
main.cpp
(定义您对
main()
的调用)您可以包含在此调用中:
add_executable(my_target
main.cpp
${src_h}
)
关于cmake - 交叉编译c/c++/cuda程序时尝试使用CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58771673/
This question already has an answer here: Character constant too long for it's type (1个答案) 1年前关闭。 我是
每次我执行 Scala 程序时,Eclipse 都会创建一个新的“运行配置”。这样做的问题是我需要自定义默认的运行配置(需要更改工作路径)。因此,我第一次创建和自定义运行配置时一切正常,但任何后续尝试
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
基本上我正在做的是创建一个充当启动器的 swing 应用程序。它所做的只是为用户提供了 3 个选项,他们可以从中选择打开一个新的 java 应用程序。 3 个不同的 java 应用程序都有不同的主题,
这个问题已经有答案了: Make a py2exe exe run without a console? (2 个回答) 已关闭 9 年前。 我不希望在打开 python 应用程序时在后台打开 cmd
我曾经尝试编译一个我为国际象棋游戏编写的 C 程序(感谢 YouTube 的 Bluefever Software 提供的教程),但是当我去编译该程序时,我执行了这行代码: C:\TDM-GCC-64
这是一段代码,通过从一个文件获取输入并在另一个文件中给出输出来执行数字的平方。 #include #include void main() { FILE *fp1, *fp2; char
#include using namespace std; class foo { private: static int cnt; // number in memory stat
我做了一个简单的 hello world 程序。我单击“开始调试”,窗口显示“项目已过期。您要构建它吗?”当我单击"is"时,下一个窗口显示“存在构建错误。您要继续并运行上次成功的构建吗?”。我再次选
这是一个程序,有人在其中输入密码并尝试三次猜密码。当我编译它时,我遇到了多个错误,其中一个包括第 13 行,它基本上说它找不到包含在 Password_Program 类中的类似函数。 #includ
我想将我的游戏导出到 .jar 文件中。它导出;当我运行它时,框架出现了,但面板没有加载。我的框架和面板位于两个不同的类文件中,但我认为这没有什么区别。而且,它在 Eclipse 中完全可以工作。我在
我粘贴了程序以从 codenameone 开发人员指南中创建一个按钮,并且我在 netbeans 中使用了该代码,但是当我单击“运行”时,它在模拟器中没有显示任何内容 最佳答案 您删除了 hi.sho
当我执行这个程序时,它并没有终止。 例如,如果我给它输入 A,输出将是: 65 7 1000001 0 65 7 1000001 ... 我的代码: #include #include void
考虑下面的基本客户端和服务器程序(只是骨架/说明我的问题)。客户端启动与服务器的连接,提示用户输入消息,然后发送到服务器并打印到屏幕。 如果我在循环中间突然退出客户端程序(例如通过关闭终端窗口),有时
我运行一个非常简单的单线程 Java 程序。当我在 Ubuntu 下使用命令检查线程时 ps -eLf 它显示操作系统级别有 14 个线程。我希望当程序有一个线程时只有一个线程,如果程序有 x 个线程
当我从命令行运行类似以下内容的代码时,真正发生了什么? > scala hello.scala 是否有hello.class生成,执行然后丢弃?还是在这种情况下Scala表现得像翻译一样?我只是在想,
程序正在从网络摄像机接收以字节为单位的图像数据,然后处理图像。程序第一次启动时使用470Mb RAM,每1秒增加到15Mb,一直持续到没有足够的空间而计算机挂起。 方法 getImage() 每 10
当我运行我的 selenium 程序时,它显示错误,如何解决这个问题? import org.openqa.selenium.By; public class sss { public sta
我写了一个简单的程序,试图查看内存中的变化,但没有任何变化。无论我是否运行代码,总是会出现大约 20% 左右的直线水平线。 #include using namespace std; int main
我是 c/c++ 领域的新手,我已经在虚拟机上沉迷太久了。 我正在修改我们在整个公司使用的现有 C++ 工具。该工具正在所有主要操作系统(Windows、Mac、Ubuntu、Solaris 等)上使
我是一名优秀的程序员,十分优秀!