Qt 项目树工程,拷贝子项目dll到子项目exe运行路径

1、项目树工程

2、项目树列表
---- BuildAll
-------- App (exe)
-------- Database (dll)

注:使用 子项目–>添加库–>内部库 的方式

3、qmake 内置的变量

$$OUT_PWD 表示输出文件(如可执行文件、库文件等)的目录路径。
$$PWD:表示当前项目文件的目录路径。
$$TARGET:表示生成的目标文件的名称(不包括扩展名)。
$$TARGET_EXT:表示生成的目标文件的扩展名。例如,在 Windows 上,它可能为 .exe。
$$DESTDIR:表示安装目标文件时的根目录路径。默认情况下,它为空字符串,表示将目标文件安装在系统默认位置。
$$INCLUDEPATH:表示包含头文件的目录路径列表。
$$LIBS:表示要链接到目标文件中的库文件列表。
$$QMAKE_CFLAGS:表示 C 编译器选项。
$$QMAKE_CXXFLAGS:表示 C++ 编译器选项。
$$QMAKE_LFLAGS:表示链接器选项。

4、在 App 子项目的 .pro 文件下输入代码
在 App 子项目下拷贝 Database 子项目中的Database.dll文件


#####################################################################################################
########## 功能:项目树工程,将子项目库文件(dll、lib)拷贝到子项目(exe)的运行路径下 ##########

## 注意: 在 Windows 下,路径分隔符是反斜杠 \,而不是正斜杠 /; 在非 Windows 下,可以直接用正斜杠 / ##

PROJECT_OUT_PWD = ""
win32 {
    # windows 下,将路径分隔符从 / 替换为 \
    PROJECT_OUT_PWD = $$replace(OUT_PWD, "/", "\\")
} else:unix {
    # unix 下,不用转换
    PROJECT_OUT_PWD = $$OUT_PWD
}

# 先定义变量
DEBUG_SOURCE_DLL_PATH = ""
RELEASE_SOURCE_DLL_PATH = ""
DEBUG_DEST_EXE_PATH = ""
RELEASE_DEST_EXE_PATH = ""

# 根据需要再对其赋值
win32 {
    DEBUG_SOURCE_DLL_PATH = $$PROJECT_OUT_PWD\..\Database\debug\Database.dll
    RELEASE_SOURCE_DLL_PATH = $$PROJECT_OUT_PWD\..\Database\release\Database.dll

    # 定义目标路径
    DEBUG_DEST_EXE_PATH = $$PROJECT_OUT_PWD\debug
    RELEASE_DEST_EXE_PATH = $$PROJECT_OUT_PWD\release

} else:unix {
    DEBUG_SOURCE_DLL_PATH = $$PROJECT_OUT_PWD/../Database/debug/Database.so
    RELEASE_SOURCE_DLL_PATH = $$PROJECT_OUT_PWD/../Database/release/Database.so

    # 定义目标路径
    DEBUG_DEST_EXE_PATH = $$PROJECT_OUT_PWD/debug
    RELEASE_DEST_EXE_PATH = $$PROJECT_OUT_PWD/release
}

# 根据构建模式选择复制命令
win32 {
    CONFIG(debug, debug|release) {
	# Debug 模式下的复制命令
	QMAKE_POST_LINK += copy /Y $$quote($$DEBUG_SOURCE_DLL_PATH) $$quote($$DEBUG_DEST_EXE_PATH)
    } else {
	# Release 模式下的复制命令
	QMAKE_POST_LINK += copy /Y $$quote($$RELEASE_SOURCE_DLL_PATH) $$quote($$RELEASE_DEST_EXE_PATH)
    }
} else {
    CONFIG(debug, debug|release) {
	# Debug 模式下的复制命令 (Unix-like 系统)
	QMAKE_POST_LINK += cp -f $$quote($$DEBUG_SOURCE_DLL_PATH) $$quote($$DEBUG_DEST_EXE_PATH)
    } else {
	# Release 模式下的复制命令 (Unix-like 系统)
	QMAKE_POST_LINK += cp -f $$quote($$RELEASE_SOURCE_DLL_PATH) $$quote($$RELEASE_DEST_EXE_PATH)
    }
}

#####################################################################################################


5、在 Database 子项目的 .pro 文件下输入代码
将 Database 子项目中的 Database.dll 文件拷贝到子项目App


#####################################################################################################
############ 功能:项目树工程,将子项目库文件(dll、lib)拷贝到子项目(exe)的运行路径下 ############

##注意: 在 Windows 下,路径分隔符是反斜杠 \,而不是正斜杠 /; 在非 Windows 下,可以直接用正斜杠 / ##

# 一般情况下,修改这两个工程名即可
# 源工程名
SOURCE_PROJECT_NAME = Database
# 目标工程名
TARGET_PROJECT_NAME = App


PROJECT_OUT_PWD = ""
win32 {
    # windows 下,将路径分隔符从 / 替换为 \\
    PROJECT_OUT_PWD = $$replace(OUT_PWD, "/", "\\\\")
} else:unix {
    # unix 下,不用转换
    PROJECT_OUT_PWD = $$OUT_PWD
}

# 先定义变量
DEBUG_SOURCE_PATH = ""
RELEASE_SOURCE_PATH = ""
DEBUG_TARGET_PATH = ""
RELEASE_TARGET_PATH = ""



# 根据需要再对其赋值
win32 {

    # 源文件路径
    DEBUG_SOURCE_PATH = $$PROJECT_OUT_PWD\\debug\\$$SOURCE_PROJECT_NAME.dll
    RELEASE_SOURCE_PATH = $$PROJECT_OUT_PWD\\release\\$$SOURCE_PROJECT_NAME.dll

    # 目标路径
    DEBUG_TARGET_PATH = $$PROJECT_OUT_PWD\\..\\$$TARGET_PROJECT_NAME\\debug
    RELEASE_TARGET_PATH = $$PROJECT_OUT_PWD\\..\\$$TARGET_PROJECT_NAME\\release

} else:unix {

    # 源文件路径
    DEBUG_SOURCE_PATH = $$PROJECT_OUT_PWD/debug/$$SOURCE_PROJECT_NAME.so
    RELEASE_SOURCE_PATH = $$PROJECT_OUT_PWD/release/$$SOURCE_PROJECT_NAME.so

    # 目标路径
    DEBUG_TARGET_PATH = $$PROJECT_OUT_PWD/../$$TARGET_PROJECT_NAME/debug
    RELEASE_TARGET_PATH = $$PROJECT_OUT_PWD/../$$TARGET_PROJECT_NAME/release
}

# 根据构建模式选择复制命令
win32 {
    CONFIG(debug, debug|release) {
	# Debug 模式下的复制命令
	QMAKE_POST_LINK += copy /Y $$quote($$DEBUG_SOURCE_PATH) $$quote($$DEBUG_TARGET_PATH)
    } else {
	# Release 模式下的复制命令
	QMAKE_POST_LINK += copy /Y $$quote($$RELEASE_SOURCE_PATH) $$quote($$RELEASE_TARGET_PATH)
    }
} else {
    CONFIG(debug, debug|release) {
	# Debug 模式下的复制命令 (Unix-like 系统)
	QMAKE_POST_LINK += cp -f $$quote($$DEBUG_SOURCE_PATH) $$quote($$DEBUG_TARGET_PATH)
    } else {
	# Release 模式下的复制命令 (Unix-like 系统)
	QMAKE_POST_LINK += cp -f $$quote($$RELEASE_SOURCE_PATH) $$quote($$RELEASE_TARGET_PATH)
    }
}

#####################################################################################################

第4、第5步,选择其中一种方式即可。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中使用CMake添加子项目是一种良好的实践,可以更好地组织和管理项目的代码结构。 首先,我们需要在CMakeLists.txt文件中设置父项目。我们可以使用add_subdirectory命令来添加子项目。例如,假设我们有一个名为"子项目"的子文件夹,我们可以这样写: ``` add_subdirectory(子项目) ``` 接下来,在子项目文件夹中,我们需要创建一个CMakeLists.txt文件。在这个文件中,我们可以定义子项目的编译规则和依赖关系。 首先,我们需要使用project命令设置子项目的名称。例如: ``` project(子项目名) ``` 然后,我们可以使用set命令定义子项目的源代码文件。例如: ``` set(子项目名_SRCS 源文件1.cpp 源文件2.cpp ) ``` 接下来,我们可以使用add_library或add_executable命令来定义子项目的目标。例如: ``` add_library(子项目名 ${子项目名_SRCS}) ``` 最后,我们可以使用target_link_libraries命令来定义子项目的依赖关系。例如: ``` target_link_libraries(子项目名 父项目名) ``` 完成以上步骤后,我们可以在父项目的CMakeLists.txt文件中使用子项目。通过添加下面的代码,我们可以将子项目添加到父项目中: ``` add_subdirectory(子项目文件夹路径) ``` 这样,我们就成功地将Qt中的子项目添加到了CMake构建系统中。这种组织方式可以帮助我们更好地管理项目结构,提高代码的可维护性和可重用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值