2016-09-01 15 views
1

我知道沒有直接的方式來將make文件轉換爲cmake,但需要一些指導。我有一個嵌入式機器的make文件,並且希望使用cmake繼續前進。需要一些幫助創建一個cmake文件來讓我的項目工作...從cmake轉換

我在linux開發機器上交叉編譯運行linux內核的嵌入式arm。

目前,所有文件都在同一個文件夾中。我的工作將其移動到這個結構: -build -documentation - 包括 -src 的CMakeLists.txt -test 的CMakeLists.txt

我想把頭文件在/包括文件夾, src文件夾中的c/cpp文件。

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 [email protected] $< 

%.o: %.c $(GPIOHEADERS) 
     $(CC) $(CCFLAGS) -c -o [email protected] $< -mcpu=arm9 

$(OUT): $(OBJECTS) $(GPIOOBJECTS) 
     $(CC) $(CCFLAGS) -o [email protected] $^ $(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過程,但沒有成功。 未定義的參考文獻等...

想法?

*****編輯**更新src/CMakeLists.txt以包含來自測試的註釋和更新。

+0

'set(SOURCES ./*.c ./*。cpp)'我上次檢查過的時候必須使用FILE命令手動填充,像這樣:http://stackoverflow.com/a/3201211/487892 – drescherjm

+2

我不使用globbing,因爲我在創建新文件時將每個文件添加到我的源變量中。即使我的'CMake'項目包含幾千個源文件。 – drescherjm

+0

@drescherjm正確。完全是猜測和希望的。我現在正在放入我的實際文件。 – wegunterjr

回答

2

你需要所有源文件添加到可執行文件:

add_executable(enterprise ${SOURCES}) 

或者至少增加生成可執行文件所需的所有源文件。

如果你有庫,那麼你需要把他們加入:

target_link_libraries(enterprise rt) 

欲瞭解更多信息please read the documentation

+0

有你。我想我的大問題是我有.h文件,是什麼 include_directories($ CMAKE_CURRENT_SOURCE_DIR}) – wegunterjr

+0

也,供應商的.o文件與他們的系統接口,是否屬於add_library(vendor vendor.o) etc ... – wegunterjr

+0

@wegunterjr你如何包含他們?使用引號(如'#include「some_header_file.h」')或使用尖括號(如'#include ')?如果您使用引號,那麼您不需要執行任何操作,因爲預處理器將在與源文件相同的目錄中查找。 –