我是不熟悉CMake的人,正在尝试将以前的Makefile转移到CMakeLists中。我有一个文件 * dsplink_defines.txt * ,具有以下编译时定义。

* -DOS_LINUX -DMAX_DSPS = 1 -DMAX_PROCESSORS = 2 -DID_GPP = 1 -DOMAPL1XX -DPROC_COMPONENT -DPOOL_COMPONENT -DNOTIFY_COMPONENT -DMPCS_COMPONENT -DRINGIO_COMPONENT -DMPLIST_COMPONENT -DMSGQ_COMPONENT -DMSGQ_ZCPY_LINK -DCHNL_COMPONENT -DCHNL_ZCPY_LINK -DZCPY_LINK -DKFILE_DEFAULT -DDA8XXGEM -DDA8XXGEM_PHYINTERFACE = SHMEM_INTERFACE -DGPP_SWI_MODE -D_REENTRANT -DVERIFY_DATA -DDDSP_DEBUG *

我们之前的Makefile通过以下方式处理了此问题,并从第8行开始使用 shell cat 处理了此问题:

BIN = ../../build/bin
TMP = build

BUILD_DEF = -DBUILD=$(BUILD_VERSION) -DBUILD_DATE=$(BUILD_DATE)

# these files are captured from the DSPLink Sample build directory (and the named      changed)
# they contain the appropriate includes and flags to build a dsplink application.
DSPLINK_INCLUDES = $(shell cat ../dsplink_config/dsplink_includes.txt)
DSPLINK_FLAGS = $(shell cat ../dsplink_config/dsplink_flags.txt)
DSPLINK_DEFINES = $(shell cat ../dsplink_config/dsplink_defines.txt)
DSPLINK_LIBS =          $(DSPLINK_PACKAGE_DIR)/dsplink/gpp/export/BIN/Linux/OMAPL1XX/RELEASE/dsplink.lib


#Our project variables
INCLUDE = -I../framework -I../io_master -I../logging -I../../dsp/include -      I../flagDictionary


#TOOLCHAIN = ${FACTORY_DIR}/build_armv5l-timesys-linux-uclibcgnueabi/toolchain/bin
TOOLCHAIN = /OMAP-L137/timesys/SDK/omapl137_evm/toolchain/bin
PLATFORM=armv5l-timesys-linux-uclibcgnueabi

#Compile Options
CC=$(TOOLCHAIN)/$(PLATFORM)-g++
LINKER=$(TOOLCHAIN)/$(PLATFORM)-g++
CFLAGS+= $(BUILD_DEF) $(INCLUDE) $(DSPLINK_DEFINES) $(DSPLINK_FLAGS)     $(DSPLINK_INCLUDES)
DEBUG = -O

#list of things to compile.
FW_BUILD_DIR=../framework/build
LOG_BUILD_DIR=../logging/build
FLAG_DICT_BUILD_DIR=../flagDictionary/build

FRAMEWORK_OBJECTS= $(FW_BUILD_DIR)/com.o \
       $(FW_BUILD_DIR)/application.o \
       $(FW_BUILD_DIR)/memoryManagerBase.o \
       $(FW_BUILD_DIR)/memoryManager.o \
       $(FW_BUILD_DIR)/arguments.o \
       $(FW_BUILD_DIR)/lockManager.o \
       $(FW_BUILD_DIR)/controlCom.o \
       $(FW_BUILD_DIR)/paths.o \
       $(LOG_BUILD_DIR)/subsystemLogMasks.o \
       $(LOG_BUILD_DIR)/logger.o

FLAG_DICT_OBJECTS= $(FLAG_DICT_BUILD_DIR)/flagEntry.o \
               $(FLAG_DICT_BUILD_DIR)/flagDictionary.o

OBJECTS = spidev_test.o sysMon.o
EXES = sysMon

all: $(OBJECTS) $(EXES)

.c.o:
mkdir -p build
$(CC) -c $(CFLAGS) $(DEBUG) -o $(TMP)/$@ $<

.cpp.o:
mkdir -p build
$(CC) -c $(CFLAGS) $(DEBUG) -o $(TMP)/$@ $<

spidev_test: $(FRAMEWORK_OBJECTS) spidev_test.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/spidev_test.o       $(FRAMEWORK_OBJECTS)


sysMon: $(FRAMEWORK_OBJECTS) sysMon.o
$(LINKER) -lpthread -lc -o $(BIN)/$@ $(DSPLINK_LIBS) build/sysMon.o    $(FLAG_DICT_OBJECTS) $(FRAMEWORK_OBJECTS)

deploy:
../../build/deploy

如何使用CMakeList传递这些

最佳答案

这应该工作:

file(READ path/to/dsplink_defines.txt defines) #read file into variable 'defines'
string(REPLACE " " ";" defines "${defines}") #turn space separation into CMake list
add_definitions(${defines})

当然,如果您完全控制文件,并且可以更改其格式以使用分号而不是空格进行分隔,则可以执行此操作,并跳过string()行(这样可能会加快CMake的处理速度)。

关于c++ - CMake编译时定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20911103/

10-10 10:01