Reputation: 1866
so far I have only used Linux to write C++ code, but I want to learn to do it in Windows as well using CMake to simplify things.
To get started, I have written the following 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})
When I run CMake (using Visual Studio 11 configuration) it seems to work properly, but when I open the CMakeWin.sln project and build and then run it, I get
Unable to start program C:\..... The system cannot find the file
specified.
But I have also received
access denied.
When I go directly to the Release or Debug folder and run
CMakeWin.exe
it runs as it shall. What can the problem be?
EDIT:
To avoid making visual studio trying to run ALL_BUILD, I had to set CMakeWin as the StartUp project. See https://simtk.org/forums/viewtopic.php?f=91&t=3676 and comments below.
Upvotes: 14
Views: 19583
Reputation: 90
1.Close the solution. 2.Close Visual Studio. 3.Reopen your project.
This worked for me.
Upvotes: 1
Reputation: 5668
In Visual Studio, right-click your project and mark it as 'Set as Startup project'.
Upvotes: 19
Reputation: 1175
In Visual Studio, open up the project properties dialog (right click on the project in the solution explorer pane and choose properties). Go to Debug and see what the command line to run the app is. That is most likely what is wrong.
Upvotes: 4
Reputation: 149125
CMake uses the same configuration as the one you are used on Linux. The common structure for simple projects is to have the sources files, compiled files and executable in same directory. So you can compile and run from the same directory.
MSVC default configuration (I do not know how to change that, and I would not dare to) uses one folder per configuration. You can have as many as them as you want, common ones would be DebugUnicode, ReleaseUnicode, DebugAnsi and ReleaseAnsi.
The common structure is :
res
folder (optional) for resource files (icons, etc.)So it is by design that executable files are not in same folder as the solution. You can execute them from there by giving their relative path: Debug\project.exe
Upvotes: 2