到目前为止,我仅使用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和下面的注释。
在Visual Studio中,打开项目属性对话框(在解决方案资源管理器窗格中右键单击该项目,然后选择属性)。转到调试,查看运行该应用程序的命令行是什么。这很可能是错误的。
CMake使用与Linux上相同的配置。简单项目的通用结构是将源文件,编译文件和可执行文件放在同一目录中。因此,您可以从同一目录进行编译和运行。
MSVC默认配置(我不知道如何更改它,我也不敢这么做)”每个configuration使用一个文件夹。您可以根据需要设置任意数量,常见的是DebugUnicode,ReleaseUnicode,DebugAnsi和ReleaseAnsi。
共同的结构是:
res
文件夹(可选)因此,根据设计可执行文件与解决方案不在同一文件夹中。您可以通过给出它们的相对路径从那里执行它们:Debug\project.exe
在Visual Studio中,右键单击您的项目并将其标记为“设置为启动项目”。