gpt4 book ai didi

qmake 额外的编译器,每个文件有多个输出

转载 作者:行者123 更新时间:2023-12-04 20:11:13 28 4
gpt4 key购买 nike

Undocumented qmake 中所述,我在我的 qmake 项目文件中声明了一个额外的编译器:

TEST = somefile.h

test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.input = TEST
test_c.commands = C:/somedir/some.exe /i ${QMAKE_FILE_IN} /o ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.variable_out = SOURCES
test_c.name = MyTestC

QMAKE_EXTRA_COMPILERS += test_c
这工作正常。但是我也想生成一个头文件。我可以轻松制作第二个自定义工具来解析此文件(或文件,如果 >1 将在 TEST 中),但我不想解析每个文件两次。我试过:
test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp \
${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_2.cpp
只是为了测试额外的编译器每次运行可以生成两个文件。我预计会出现诸如“ file somefile_2.cpp doesn't exist ”之类的错误,但项目编译没有错误,第二个输出文件被忽略。在 Makefile 中 somefile_2.cpp不存在。
现在我正在考虑两种变体:
  • 制作一个额外的编译器来生成一个存档,所有需要的输出文件将被一次保存。套装tool1.variable_out = TOOL_1_OUT ,并添加两个额外的编译器 toolN.input = TOOL_1_OUT只需“解压缩”存档文件(每个工具一个)并将它们附加到一些变量。
    在这种情况下,每个输入文件将调用三个执行。这不是最优的,但至少解析器每个文件只运行一次。
  • .output_function 做实验选项。制作一个返回与 .output 同名的 qmake 函数现在可以,但还将第二个文件名附加到 HEADERS .

  • 附言我正在使用 MinGW x32 4.7、QtCreator 2.7.1、Qt 5.1.0、C++11。

    最佳答案

    您的变体 #2 是正确的想法。这对我有用:

    defineReplace(addToHeaders) {
    source = $$1
    source_split = $$split(source, ".")
    source_without_extension = $$first(source_split)
    HEADERS += ${QMAKE_VAR_OBJECTS_DIR}$${source_without_extension}_1.h
    return(${QMAKE_VAR_OBJECTS_DIR}$${source_without_extension}_1.cpp)
    }
    defineReplace(FILE_IN_addToHeaders) {
    # qmake emits a warning unless this function is defined; not sure why.
    }

    TEST = somefile.h

    test_c.output_function = addToHeaders
    test_c.input = TEST
    test_c.commands = cp ${QMAKE_FILE_IN} ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp ; cp ${QMAKE_FILE_IN} ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.h
    test_c.variable_out = SOURCES
    test_c.name = MyTestC

    QMAKE_EXTRA_COMPILERS += test_c

    它生成一个构建 somefile_1.cpp 和 somefile_1.h 的 Makefile,其中 somefile_1.cpp 添加到 SOURCES, somefile_1.h 添加到 HEADERS。

    关于qmake 额外的编译器,每个文件有多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073531/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com