需要一些帮助创建一个cmake文件来让我的项目工作…

Need some help creating a cmake file to get my project to work...convert from cmake

本文关键字:我的 文件 项目 工作 cmake 帮助 创建 一个      更新时间:2023-10-16

我知道没有直接的方法将make文件转换为cmake,但需要一些指导。我有一个用于嵌入式机器的make文件,并希望使用cmake向前移动。

我正在linux开发机上交叉编译一个运行linux内核的嵌入式手臂。

当前,所有文件都在同一个文件夹中。我正在努力将他们转移到这个结构中:构建文档包括srcCMakeLists.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以包含来自测试的注释和更新

您需要将所有源文件添加到可执行文件:

add_executable(enterprise ${SOURCES})

或者至少添加构建可执行文件所需的所有源文件。

如果你有库,那么你也需要添加它们:

target_link_libraries(enterprise rt)

更多信息请阅读文档