安装目录在CMakeLists.txt,适用于Visual Studio和Qt Creator
Installation directory in CMakeLists.txt, suitable for Visual Studio and Qt Creator
我必须在 Windows 中处理 CMake 3.x、Qt Creator 3.3.0、Qt 4.8.6、Visual Studio 2008(很少在 Debian 中处理 Qt Creator + GCC) .
这条指令
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
不方便,因为在同一目录中混合调试和发布 *.lib
文件。我想将 libs
保存在相应的子文件夹中。
我尝试了 here 的以下说明:
install(TARGETS ${PROJECT} DESTINATION
${CMAKE_INSTALL_PREFIX}/lib/${BUILD_TYPE})
它适用于 Visual Studio,因为它是一个多配置解决方案,我们通过 ${BUILD_TYPE}
,受反斜杠 '\'
保护以进一步传播。
但是如何为 Qt Creator + MS C++ compiler
实现相同的输出?我是否应该将 Debug
(例如)分配给 ${CMAKE_BUILD_TYPE}
(通过命令行界面)和特殊的自定义标志,告诉 CMake 我们处理 nmake/make?我的意思是条件安装指令,它在 Windows 和 Linux 中可以正常工作,并且在 CMake
的命令行参数中需要最小的差异。有标准解决方案我不想重新发明轮子
您看到您可以使用 BUILD_TYPE
变量 在编译时设置 在安装时配置库的目标文件夹。这是特定于 Visual Studio.
在其他构建系统(make、nmake、ninja 等)中,您必须使用 CMAKE_BUILD_TYPE
变量,在配置时设置 来检索相同的信息。在这种情况下,如您所见,必须在单独的构建文件夹中生成不同的配置(调试和发布)。在这些文件夹中,CMake 生成步骤是使用 CMAKE_BUILD_TYPE
变量中的正确值完成的。示例:
cd /home/user/project/xx_project/build_release
cmake -DCMAKE_BUILD_TYPE=Release /home/user/project/xx_project/src
cd /home/user/project/xx_project/build_debug
cmake -DCMAKE_BUILD_TYPE=Debug /home/user/project/xx_project/src
要检测用户是从 Visual Studio 还是从命令行构建,"there is a variable for that":The MSVC_IDE Cmake variable
解决方案可以是
if(MSVC_IDE)
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${BUILD_TYPE})
else()
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_BUILD_TYPE})
endif()
我不完全确定 ${CMAKE_BUILD_TYPE} 之前是否有必要使用反斜杠。你应该自己测试一下
我必须在 Windows 中处理 CMake 3.x、Qt Creator 3.3.0、Qt 4.8.6、Visual Studio 2008(很少在 Debian 中处理 Qt Creator + GCC) .
这条指令
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
不方便,因为在同一目录中混合调试和发布 *.lib
文件。我想将 libs
保存在相应的子文件夹中。
我尝试了 here 的以下说明:
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${BUILD_TYPE})
它适用于 Visual Studio,因为它是一个多配置解决方案,我们通过 ${BUILD_TYPE}
,受反斜杠 '\'
保护以进一步传播。
但是如何为 Qt Creator + MS C++ compiler
实现相同的输出?我是否应该将 Debug
(例如)分配给 ${CMAKE_BUILD_TYPE}
(通过命令行界面)和特殊的自定义标志,告诉 CMake 我们处理 nmake/make?我的意思是条件安装指令,它在 Windows 和 Linux 中可以正常工作,并且在 CMake
的命令行参数中需要最小的差异。有标准解决方案我不想重新发明轮子
您看到您可以使用 BUILD_TYPE
变量 在编译时设置 在安装时配置库的目标文件夹。这是特定于 Visual Studio.
在其他构建系统(make、nmake、ninja 等)中,您必须使用 CMAKE_BUILD_TYPE
变量,在配置时设置 来检索相同的信息。在这种情况下,如您所见,必须在单独的构建文件夹中生成不同的配置(调试和发布)。在这些文件夹中,CMake 生成步骤是使用 CMAKE_BUILD_TYPE
变量中的正确值完成的。示例:
cd /home/user/project/xx_project/build_release
cmake -DCMAKE_BUILD_TYPE=Release /home/user/project/xx_project/src
cd /home/user/project/xx_project/build_debug
cmake -DCMAKE_BUILD_TYPE=Debug /home/user/project/xx_project/src
要检测用户是从 Visual Studio 还是从命令行构建,"there is a variable for that":The MSVC_IDE Cmake variable
解决方案可以是
if(MSVC_IDE)
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${BUILD_TYPE})
else()
install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_BUILD_TYPE})
endif()
我不完全确定 ${CMAKE_BUILD_TYPE} 之前是否有必要使用反斜杠。你应该自己测试一下