Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将Linux Debian gcc命令转换为CMakeLists.txt_C++_C_Cmake - Fatal编程技术网

C++ 将Linux Debian gcc命令转换为CMakeLists.txt

C++ 将Linux Debian gcc命令转换为CMakeLists.txt,c++,c,cmake,C++,C,Cmake,我希望这个问题不是很简单,但我正在尝试将gcc命令转换为CMakeLists.txt。不幸的是,我不能理解基本的东西,我希望你能帮助我。 我想这样做的主要原因是,我正在一个树莓上构建整个东西,它有相当多的性能问题。所以整个过程需要90分钟。有了cmake,我希望在进行更改时,构建过程能够更快地完成。这在理论上应该是可能的 下面是我的gcc命令 gcc -std=c99 -flto=1 -I$HOME/install/include -L$HOME/install/lib main.c Motor

我希望这个问题不是很简单,但我正在尝试将gcc命令转换为CMakeLists.txt。不幸的是,我不能理解基本的东西,我希望你能帮助我。 我想这样做的主要原因是,我正在一个树莓上构建整个东西,它有相当多的性能问题。所以整个过程需要90分钟。有了cmake,我希望在进行更改时,构建过程能够更快地完成。这在理论上应该是可能的

下面是我的gcc命令

gcc -std=c99 -flto=1 -I$HOME/install/include -L$HOME/install/lib main.c MotorSteuerung.c 
    -lopen62541 -lmbedtls -lmbedx509 -lmbedcrypto -o MotorSteuerung
我已经开始使用cmake文件,但不幸的是,我不太明白我必须做什么。特别是-flto=1,它将并行标志限制为1(否则它无法在树莓上构建),这让我在长时间搜索后来到了这里。但我也不太明白如何真正整合这些库

cmake_minimum_required(VERSION 3.20)

# set the project name
project(MotorSteuerung)

# Set the output folder where your program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

# The following folder will be included
include_directories("${PROJECT_SOURCE_DIR}")

# add the executable
add_executable(Tutorial open62541::open62541)
感谢您的帮助

您可以使用
SET()
设置编译器标志。检查

您可以将
CMAKE_CXX_标志设置为要传递给编译器的标志

set()和CMAKE_CXX_标志的提示对我帮助很大。 我现在已经把其余的放在一起并试过了。不幸的是,正如评论中提到的,这对构建时间没有影响,但是处理现在比使用gcc命令要好得多。 在这里你可以找到我的cmake文件,也许它可以帮助你们中的一些人翻译gcc命令

cmake_minimum_required(VERSION 3.10)

# set the project name
project(MotorSteuerung)

message("Cmake Prefix Path is \"${CMAKE_PREFIX_PATH}\"")
# open62541 must be installed.
# If in custom path, then use -DCMAKE_PREFIX_PATH=/home/user/install
find_package(open62541 1.1 REQUIRED COMPONENTS FullNamespace)

#The following folder will be included
include_directories(${CMAKE_PREFIX_PATH}/include)
link_directories(${CMAKE_PREFIX_PATH}/lib)

# add the executable
add_executable(MotorSteuerung main.c MotorSteuerung.c)

#The following libraries will be linked
target_link_libraries(MotorSteuerung open62541 mbedtls mbedx509 mbedcrypto)

#Limit Parallel Linking Jobs with -DMY_LIMIT_FLAG=ON
option(MY_LIMIT_FLAG "If Build fail you can set this ON to Limit parallel Linking Jobs to One" OFF) #OFF by default
if(MY_LIMIT_FLAG)
    set(CMAKE_C_FLAGS "-flto=1")
    message("Set Parallel Linking Jobs to One")
endif(MY_LIMIT_FLAG)
unset(MY_LIMIT_FLAG CACHE) # <---- this is the important!!

#Set the the C Standart
set_property(TARGET MotorSteuerung PROPERTY C_STANDARD 99)
cmake_最低要求(3.10版)
#设置项目名称
项目(摩托斯特隆)
消息(“Cmake前缀路径为\“${Cmake\U前缀\U路径}\”)
#必须安装open62541。
#如果在自定义路径中,则使用-DCMAKE_PREFIX_path=/home/user/install
查找_包(open62541 1.1必需组件FullNamespace)
#将包括以下文件夹
include_目录(${CMAKE_PREFIX_PATH}/include)
链接目录(${CMAKE_PREFIX_PATH}/lib)
#添加可执行文件
添加可执行文件(MotorSteuerung main.c MotorSteuerung.c)
#将链接以下库
目标链接库(MotorSteuerung open62541 mbedtls mbedx509 mbedcrypto)
#使用-DMY\u Limit\u FLAG=ON限制并行链接作业
选项(MY_LIMIT_FLAG“如果构建失败,您可以将其设置为打开以将并行链接作业限制为一个“关闭”)#默认情况下关闭
如果(我的限制标志)
设置(CMAKE_C_标志“-flto=1”)
消息(“将并行链接作业设置为一个”)
endif(我的限制标志)

未设置(My-LimiTi标志缓存)你考虑使用吗?你可以安装在你的笔记本电脑上,作为交叉编译器使用!有关详细信息,请参阅。您不需要在Raspberry Pi上运行GCC!使用CMake构建不会比普通编译器调用更快。“特别是-flto=1,它将并行标志限制为1”-因为这是一个编译器标志,您可以通过谷歌搜索它。见例。“我也不太明白如何真正整合这些库”-再说一遍,谷歌就是这样。永远不要给变量赋值
CMAKE\u BINARY\u DIR
,这个变量对CMAKE有特殊的意义,应该被视为只读。@BasileStarynkevitch是的,我想到了这一点,并且正在并行处理它,但在我的debian vm上构建它也需要很长时间,大约15分钟。但是,我没有在这里设置-flto=1标志。@Tsyvarev很高兴知道,得到的提示是,在构建时使用make-j命令会更快,特别是当我只更改源代码中的一行时……好的,谢谢,我明天会看一看,如果有帮助,我想我太傻了,看不出来。。。