到目前为止,我只使用Linux编写C ++代码,但我想学习在Windows中使用CMake来简化操作。
首先,我写了以下CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
PROJECT( CMakeWin )
SET(CMAKE_BUILD_TYPE Release)
# find opencv and set variables
Set(OpenCV_DIR C:/Users/Erik/Documents/Libraries/opencv/build)
FIND_PACKAGE(OpenCV REQUIRED)
#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
ADD_EXECUTABLE( ${PROJECT_NAME}
src/main.cpp
)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})
当我运行CMake(使用Visual Studio 11配置)时,它似乎正常工作,但是当我打开CMakeWin.sln项目并构建然后运行它时,我得到了
Unable to start program C:\..... The system cannot find the file
specified.
但我也收到了
access denied.
当我直接进入Release或Debug文件夹并运行
时CMakeWin.exe
它按原样运行。问题是什么?
编辑:
为了避免让visual studio试图运行ALL_BUILD,我不得不将CMakeWin设置为StartUp项目。请参阅下面的https://simtk.org/forums/viewtopic.php?f=91&t=3676和评论。
答案 0 :(得分:4)
在Visual Studio中,打开项目属性对话框(右键单击解决方案资源管理器窗格中的项目,然后选择属性)。转到Debug并查看运行该应用程序的命令行。这很可能是错误的。
答案 1 :(得分:2)
CMake使用与您在Linux上使用的配置相同的配置。简单项目的通用结构是将源文件,编译文件和可执行文件放在同一目录中。所以你可以从同一个目录编译和运行。
MSVC默认配置(我不知道如何更改,我不敢)每个配置使用一个文件夹。您可以根据需要拥有它们,常见的有DebugUnicode,ReleaseUnicode,DebugAnsi和ReleaseAnsi。
共同的结构是:
res
文件夹(可选)因此 by design 可执行文件与解决方案不在同一个文件夹中。您可以通过提供相对路径来执行它们:Debug\project.exe
答案 2 :(得分:0)
在Visual Studio中,查看并选择属性管理器,您将看到debug | x64和release | x64,其中添加了属性,如图所示enter image description here