需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换
Posted
技术标签:
【中文标题】需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换【英文标题】:Need some help creating a cmake file to get my project to work...convert from cmake 【发布时间】:2016-09-01 16:21:35 【问题描述】:我知道没有直接的方法可以将 make 文件转换为 cmake,但需要一些指导。我有一个嵌入式机器的 make 文件,并希望使用 cmake 继续前进。
我在 linux 开发机器上为运行 linux 内核的嵌入式 arm 进行交叉编译。
目前,所有文件都在同一个文件夹中。我正在努力将它们移至此结构: -建造 -文档 -包括 -src CMakeLists.txt -测试 CMakeLists.txt
我想把头文件放在/includes文件夹,c/cpp文件放在src文件夹。
OUT = enterprise.exe
CC = g++
CCFLAGS = -lrt -Wall -pthread
HEADERS = logobj.h message.h channel.h utilities.h parameter.h mycan.h vthread.h logger.h protocol_quest.h protocol_can.h protocol_io.h protocol_navitrol.h qt_nav.h qt_battery.h qt_iodealer.h enterprise.h
OBJECTS = logobj.o message.o channel.o utilities.o parameter.o mycan.o vthread.o logger.o protocol_quest.o protocol_can.o protocol_io.o protocol_navitrol.o qt_nav.o qt_battery.o qt_iodealer.o enterprise.o
GPIOHEADERS = evgpio.h
GPIOOBJECTS = evgpio.o
%.o: %.c $(HEADERS)
$(CC) $(CCFLAGS) -c -o $@ $<
%.o: %.c $(GPIOHEADERS)
$(CC) $(CCFLAGS) -c -o $@ $< -mcpu=arm9
$(OUT): $(OBJECTS) $(GPIOOBJECTS)
$(CC) $(CCFLAGS) -o $@ $^ $(LIB)
clean:
-rm -f $(OBJECTS) $(GPIOOBJECTS)
-rm -f $(OUT)
我想它会是这样的:
顶层文件夹 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(enterprise)
set(CMAKE_CXX_COMPILER /opt/toolchains/arm-2008q3/bin/arm-none-linux-gnueabi-g++)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(COMPILE_FLAGS "-lrt -Wall -pthread")
add_subdirectory(src)
/src 文件夹 CMakeLists.txt
include_directories($CMAKE_CURRENT_SOURCE_DIR) //haven't moved the headers yet
set(SOURCES $CMAKE_CURRENT_SOURCE_DIR filename1.cpp filename2.cpp etc.cpp)
set(vendorLib filenameVendor1.o filenameVendor2.o etcVendor.o)
add_executable(enterprise $SOURCES)
target_link_libraries(enterprise vendorLib)
我的一部分认为应该有一些链接,但不确定在哪里。 此时,我可以通过 cmake 过程,但 make 失败。 未定义的引用等...
想法?
*****EDIT** 更新了 src/CMakeLists.txt 以包含来自测试的 cmets 和更新。
【问题讨论】:
set(SOURCES ./*.c ./*.cpp)
上次我检查您必须使用 FILE 命令手动 glob,如下所示:***.com/a/3201211/487892
我不使用 globbing 我在创建新文件时将每个文件添加到我的源变量中。即使我的 CMake
项目包含数千个源文件。
@drescherjm 正确。完全是在猜测和希望。我现在正在放入我的实际文件。
我编辑了最初的帖子。现在,它通过 cmake 实现了,但是当我尝试实现它时,我遇到了一些它找不到的问题。其中一个源文件被编译为 .o ...我如何包含它以帮助我的项目编译?
【参考方案1】:
您需要将所有源文件添加到可执行文件中:
add_executable(enterprise $SOURCES)
或者至少添加构建可执行文件所需的所有源文件。
如果你有库,那么你也需要添加它们:
target_link_libraries(enterprise rt)
欲了解更多信息please read the documentation。
【讨论】:
知道了。我想我的大问题是我有 .h 文件,那是什么 include_directories($CMAKE_CURRENT_SOURCE_DIR) 另外,我有来自供应商的 .o 文件来与他们的系统交互,是否属于 add_library(vendor vendor.o) 等... @wegunterjr 你如何包含它们?使用引号(如#include "some_header_file.h"
)还是使用尖括号(如#include <some_header_file.h>
)?如果使用引号,则无需执行任何操作,因为预处理器将在与源文件相同的目录中查找。
复制。我的意思是让 cmake 用于编译...还是 cmake 不需要知道?以上是关于需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换的主要内容,如果未能解决你的问题,请参考以下文章
如何更改我的 FFMPEG 命令以使我的 HTTP Live Streams 更高效?