2

我一直在开发一个旧游戏,我创建了 CMake 文件以摆脱 Makefile 和 Visual Studio 项目的混合。一切运行良好,但我很难弄清楚在运行安装时允许开发人员指定将输出文件复制到何处的正确方法。

问题是有许多 DLL 和一些自定义目标需要将它们的输出复制到包含游戏数据(关卡、艺术、声音等)的目录结构中,然后才能测试代码。

我的安装命令当前使用我在顶层 CMakeLists.txt 中“设置”的变量来指定输出目录。我尝试在 cmake 命令行上用 -DD3_GAMEDIR 覆盖它。该变量在 CMakeCache 中设置,但 SET 命令似乎仍然覆盖它。

在使用 SET 来查看用户是否指定了值之前,我是否应该检查变量的长度?这对我来说似乎是一个黑客,但我很难找到正确的方法来做到这一点。

谢谢!

4

3 回答 3

3

安装目标支持 DESTDIR 参数,因此您可以执行以下操作:

make install DESTDIR="C:\RootGameDir"

另一种选择是仅设置尚未设置的变量 ( if(myVar)),但我个人更喜欢 DESTDIR 解决方案。

于 2009-11-23T03:03:39.837 回答
1

这是anwser,根据您的cmake版本:

SET(CMAKE_VERSION "${CMAKE_CACHE_MAJOR_VERSION}.${CMAKE_CACHE_MINOR_VERSION}")
IF("${CMAKE_VERSION}" STRGREATER "2.4")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY /path/of/your/install/${CMAKE_BUILD_TYPE}/bin)
SET(CMAKE_LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib)
ELSE("${CMAKE_VERSION}" STRGREATER "2.4")
SET(EXECUTABLE_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/bin)
SET(LIBRARY_OUTPUT_PATH /path/of/your/install/${CMAKE_BUILD_TYPE}/lib)
ENDIF("${CMAKE_VERSION}" STRGREATER "2.4")
于 2009-11-23T08:29:22.347 回答
1

使用各种CMAKE_INSTALL_PREFIX,PROJECT_SOURCE_DIRPROJECT_BINARY_DIR怎么样?

于 2009-11-23T08:44:56.590 回答