扩展C++ cmakelist.txt的项目

发布于 2025-02-07 04:54:45 字数 2297 浏览 0 评论 0原文

我正在尝试将旧项目与cmakelists.txt和googletest框架一起转换为现代项目,但我无法处理依赖关系。 这是我的项目结构

Project-LG
    src/
        app/
          main.cpp
          A.cpp
          A.hpp
          B.cpp
          B.hpp
          C.cpp
          C.hpp
          ...
        cpp-utils/
          D.cpp
          D.hpp
          E.hpp
          F.hpp
        json/
            json.hpp
        hiredis/    /*Makefile project*/
        orane2/     /*Makefile project*/
        rmr/        /*Makefile project*/
        spdlog/     /*Headers project with nested directories*/
        Makefile

,这是“ project-lg” makefile,

CC=gcc
CPP=g++

SRCDIR = .
APPDIR = $(SRCDIR)/app
UTILSDIR = $(SRCDIR)/cpp-utils

TARGETDIR =./../out
OBJDIR =./../out/obj
APP_OBJDIR =$(OBJDIR)/app
UTILS_OBJDIR =$(OBJDIR)/cpp-utils

LIBSDIR = ./../libs

INCLUDE_FILE = \
    -Iapp \
    -Icpp-utils \
    -Irmr/si \
    -Irmr/si/si95 \
    -Irmr/common \
    -Ijson \
    -Iorane2 \
    -I. \
    -Ihiredis

SUBDIRS := \
    $(SRCDIR)/rmr \
    $(SRCDIR)/orane2 \
    $(SRCDIR)/hiredis

LFLAGS =
LIBS += -pthread -static-libstdc++ \
    -L$(LIBSDIR) -l:librmr.a -l:liborane2.a -l:hiredis.a

XAPP_NAME_STR := '"app-lg"'

CFLAGS += -Wall -g -O2 -DXAPP_NAME=$(XAPP_NAME_STR) $(INCLUDE_FILE)
CPPFLAGS = $(CFLAGS) -fPIC -std=c++17

APP_EXE ?= xapp

APP_SOURCES := $(shell find $(APPDIR) -maxdepth 1 -name '*.cpp' -printf '%f\n')
UTILS_SOURCES := $(shell find $(UTILSDIR) -maxdepth 1 -name '*.cpp' -printf '%f\n')

APP_OBJS := $(addprefix $(APP_OBJDIR)/, $(APP_SOURCES:%.cpp=%.o))
UTILS_OBJS := $(addprefix $(UTILS_OBJDIR)/, $(UTILS_SOURCES:%.cpp=%.o))

.SUFFIXES: .c~.o

.PHONY: all $(SUBDIRS) clean

all: $(SUBDIRS) $(APP_EXE)

$(APP_EXE): $(APP_OBJS) $(UTILS_OBJS)
    @mkdir -p $(TARGETDIR)
    @mkdir -p $(OBJDIR)
    $(CPP) $(CFLAGS) $(LFLAGS) $(APP_OBJS) $(UTILS_OBJS) $(LIBS) -o $(TARGETDIR)/$@

$(APP_OBJDIR)/%.o : $(APPDIR)/%.cpp
    @mkdir -p $(OBJDIR)
    @mkdir -p $(APP_OBJDIR)
    $(CPP) -c $(CPPFLAGS) $(LFLAGS) $< -o $@

$(UTILS_OBJDIR)/%.o : $(UTILSDIR)/%.cpp
    @mkdir -p $(OBJDIR)
    @mkdir -p $(UTILS_OBJDIR)
    $(CPP) -c $(CPPFLAGS) $(LFLAGS) $< -o $@

$(SUBDIRS):
    $(MAKE) -C $@
clean:
    rm -rf $(TARGETDIR)

很难弄清楚如何从cmake调用makefile以及如何与所有依赖关系添加googletest框架 请接受我的时间。

I'm trying to transform old project with Makefile to a modern one with CMakeLists.txt and GoogleTest framework but i can't handle the dependencies.
This is my Project structure

Project-LG
    src/
        app/
          main.cpp
          A.cpp
          A.hpp
          B.cpp
          B.hpp
          C.cpp
          C.hpp
          ...
        cpp-utils/
          D.cpp
          D.hpp
          E.hpp
          F.hpp
        json/
            json.hpp
        hiredis/    /*Makefile project*/
        orane2/     /*Makefile project*/
        rmr/        /*Makefile project*/
        spdlog/     /*Headers project with nested directories*/
        Makefile

And this is the "Project-LG" Makefile

CC=gcc
CPP=g++

SRCDIR = .
APPDIR = $(SRCDIR)/app
UTILSDIR = $(SRCDIR)/cpp-utils

TARGETDIR =./../out
OBJDIR =./../out/obj
APP_OBJDIR =$(OBJDIR)/app
UTILS_OBJDIR =$(OBJDIR)/cpp-utils

LIBSDIR = ./../libs

INCLUDE_FILE = \
    -Iapp \
    -Icpp-utils \
    -Irmr/si \
    -Irmr/si/si95 \
    -Irmr/common \
    -Ijson \
    -Iorane2 \
    -I. \
    -Ihiredis

SUBDIRS := \
    $(SRCDIR)/rmr \
    $(SRCDIR)/orane2 \
    $(SRCDIR)/hiredis

LFLAGS =
LIBS += -pthread -static-libstdc++ \
    -L$(LIBSDIR) -l:librmr.a -l:liborane2.a -l:hiredis.a

XAPP_NAME_STR := '"app-lg"'

CFLAGS += -Wall -g -O2 -DXAPP_NAME=$(XAPP_NAME_STR) $(INCLUDE_FILE)
CPPFLAGS = $(CFLAGS) -fPIC -std=c++17

APP_EXE ?= xapp

APP_SOURCES := $(shell find $(APPDIR) -maxdepth 1 -name '*.cpp' -printf '%f\n')
UTILS_SOURCES := $(shell find $(UTILSDIR) -maxdepth 1 -name '*.cpp' -printf '%f\n')

APP_OBJS := $(addprefix $(APP_OBJDIR)/, $(APP_SOURCES:%.cpp=%.o))
UTILS_OBJS := $(addprefix $(UTILS_OBJDIR)/, $(UTILS_SOURCES:%.cpp=%.o))

.SUFFIXES: .c~.o

.PHONY: all $(SUBDIRS) clean

all: $(SUBDIRS) $(APP_EXE)

$(APP_EXE): $(APP_OBJS) $(UTILS_OBJS)
    @mkdir -p $(TARGETDIR)
    @mkdir -p $(OBJDIR)
    $(CPP) $(CFLAGS) $(LFLAGS) $(APP_OBJS) $(UTILS_OBJS) $(LIBS) -o $(TARGETDIR)/$@

$(APP_OBJDIR)/%.o : $(APPDIR)/%.cpp
    @mkdir -p $(OBJDIR)
    @mkdir -p $(APP_OBJDIR)
    $(CPP) -c $(CPPFLAGS) $(LFLAGS) 
lt; -o $@

$(UTILS_OBJDIR)/%.o : $(UTILSDIR)/%.cpp
    @mkdir -p $(OBJDIR)
    @mkdir -p $(UTILS_OBJDIR)
    $(CPP) -c $(CPPFLAGS) $(LFLAGS) 
lt; -o $@

$(SUBDIRS):
    $(MAKE) -C $@
clean:
    rm -rf $(TARGETDIR)

It was difficult to figure out how to call the Makefile from CMake and how to add the GoogleTest framework with all its dependencies
Please accept my thanks for your time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文