【发布时间】: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,如下所示:stackoverflow.com/a/3201211/487892 -
我不使用 globbing 我在创建新文件时将每个文件添加到我的源变量中。即使我的
CMake项目包含数千个源文件。 -
@drescherjm 正确。完全是在猜测和希望。我现在正在放入我的实际文件。
-
我编辑了最初的帖子。现在,它通过 cmake 实现了,但是当我尝试实现它时,我遇到了一些它找不到的问题。其中一个源文件被编译为 .o ...我如何包含它以帮助我的项目编译?
标签: c++ linux makefile cmake embedded