Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt自动创建单独的包括、用户界面、资源文件夹_C++_Qt_Autotools_Automake - Fatal编程技术网

C++ Qt自动创建单独的包括、用户界面、资源文件夹

C++ Qt自动创建单独的包括、用户界面、资源文件夹,c++,qt,autotools,automake,C++,Qt,Autotools,Automake,基于,我创建了一个基于Autotools的构建系统,它接受Qt UI和RSC文件,而无需调用QMAKE 但是,我希望以以下方式将源文件、头文件和ui文件分离到文件夹中: ${srcdir} ├── Makefile.am ├── main.cc ├── include │   └── mainwidget.h ├── src │   └── mainwidget.cc └── ui └── mainwidget.ui 并按以下方式对构建目录进行排序 ${builddir} ├── in

基于,我创建了一个基于Autotools的构建系统,它接受Qt UI和RSC文件,而无需调用QMAKE

但是,我希望以以下方式将源文件、头文件和ui文件分离到文件夹中:

${srcdir}
├── Makefile.am
├── main.cc
├── include
│   └── mainwidget.h
├── src
│   └── mainwidget.cc
└── ui
    └── mainwidget.ui
并按以下方式对构建目录进行排序

${builddir}
├── include
│   └── ui_mainwidget.h
├── Makefile
├── main.o
├── mainwidget.o
└── moc_mainwidget.o
My Makefile.am当前的外观如下:

moc_%.cc: %.h
    @MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<

ui_%.h: %.ui
    @UIC@ -o $@ $<

qrc_%.cc: %.qrc
    @RCC@ -o $@ $<

bin_PROGRAMS = qthello
BUILT_SOURCES = ui_mainwidget.h

qthello_CXXFLAGS = -I$(srcdir)/include -I$(builddir)/include
qthello_CPPFLAGS = $(QT_CPPFLAGS)

qthello_LDFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)

qthello_SOURCES =       \
    moc_mainwidget.cc   \
    mainwidget.cc       \
    main.cc
我突然想到,必须对构建规则进行一些更改,以确保在$(builddir)中存在include、src、ui-目录,并传递正确的输入文件。然而,我在编写此类构建规则方面缺乏经验,谷歌似乎没有答案


有什么简单的便携式方法可以实现这一点吗?

所以我最终找到了一个解决方案,多亏了

下面是最终的Makefile.am

moc_%.cc: ../include/%.h
    $(MKDIR_P) $(@D)
    @MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<

ui_%.h: ../ui/%.ui
    $(MKDIR_P) $(@D)
    @UIC@ -o $@ $<

qrc_%.cc: %.qrc
    $(MKDIR_P) $(@D)
    @RCC@ -o $@ $<

clean-local:
    rm -rf ui/ include/

bin_PROGRAMS = qthello

BUILT_SOURCES =               \
    include/ui_mainwidget.h 

qthello_CXXFLAGS =            \
       -I$(srcdir)/include    \
       -I$(builddir)/include

qthello_CPPFLAGS = $(QT_CPPFLAGS)

qthello_LFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)

qthello_SOURCES =              \
    ui/moc_mainwidget.cc       \
    src/mainwidget.cc          \
    main.cc
moc\%.cc:../include/%.h
$(MKDIR_P)$(@D)
@MOC@-o$@$(DEFS)$(默认值包括)$(包括)$(AM\U CPPFLAGS)$(CPPFLAGS)$(MOC\U CPPFLAGS)$<
ui\%.h:../ui/%.ui
$(MKDIR_P)$(@D)
@UIC@-o$@$<
qrc\%.cc:%.qrc
$(MKDIR_P)$(@D)
@RCC@-o$@$<
清洁本地:
rm-射频用户界面/包括/
bin_PROGRAMS=qthello
内置源=\
include/ui_mainwidget.h
qthello_CXXFLAGS=\
-I$(srcdir)/包括\
-I$(builddir)/包括
qthello_CPPFLAGS=$(QT_CPPFLAGS)
qthello\u LFLAGS=$(QT\u LDFLAGS)
qthello\u LDADD=$(QT\u LIBS)
qtu源=\
ui/moc_mainwidget.cc\
src/mainwidget.cc\
main.cc

请记住,必须将
AC\u PROG\u MKDIR\u p
添加到
configure.ax

不知道此解决方案有多通用-在源代码树之外构建,等等但它仍然是一个非常有用的问答。它建立在
Makefile.in
规则中的
COMPILE
宏的原则之上。做得好:)
moc_%.cc: ../include/%.h
    $(MKDIR_P) $(@D)
    @MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<

ui_%.h: ../ui/%.ui
    $(MKDIR_P) $(@D)
    @UIC@ -o $@ $<

qrc_%.cc: %.qrc
    $(MKDIR_P) $(@D)
    @RCC@ -o $@ $<

clean-local:
    rm -rf ui/ include/

bin_PROGRAMS = qthello

BUILT_SOURCES =               \
    include/ui_mainwidget.h 

qthello_CXXFLAGS =            \
       -I$(srcdir)/include    \
       -I$(builddir)/include

qthello_CPPFLAGS = $(QT_CPPFLAGS)

qthello_LFLAGS = $(QT_LDFLAGS)
qthello_LDADD = $(QT_LIBS)

qthello_SOURCES =              \
    ui/moc_mainwidget.cc       \
    src/mainwidget.cc          \
    main.cc