проект установки cmake не копирует мой исполняемый файл в указанную мной папку
только начинаю с Cmake. Я успешно настроил самое минимальное приложение hello world C++ для VS2012 на Win7, но у меня есть последняя ноющая вещь, которая не совсем правильная, и я не могу понять, почему : (
моя структура папок:
[cmakeTest]
- [build]
- [source]
- [helloWorld]
- main.cpp
- CMakeLists.txt
- CMakeLists.txt
мой главный.cpp файл просто:
#include <iostream>
int main()
{
std::cout << "Hello World!";
}
источник/CMakeLists.txt-это:
cmake_minimum_required (VERSION 3.0.1)
# Specifies project name for VS solution
# VS projects will be made for each CMake target specified
project(cmakeTesting)
# set the install directory
set(CMAKE_INSTALL_PREFIX ${cmakeTesting_BINARY_DIR}/bin)
# Generate organiser projects
# Creates "CMakePredefinedTargets" folder with INSTALL and ZERO_CHECK
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Queue up CMakeLists from subdirectories
add_subdirectory(helloWorld)
источник / helloWorld / CMakeLists.txt-это:
# Set Properties->General->Configuration Type to Application (.exe)
# Creates helloWorld.exe with the listed sources (main.cxx)
# Adds sources to the Solution Explorer
add_executable (helloWorld main.cpp)
# Creates a folder called "executables" and adds target
# project (helloWorld.vcproj) under it
set_property(TARGET helloWorld PROPERTY FOLDER "executables")
# Adds logic to INSTALL.vcproj to copy helloWorld.exe to dest dir
install (TARGETS helloWorld RUNTIME DESTINATION ${PROJECT_BINARY_BIN}/bin)
что работает:
он создает VS-решение / проект в каталоге сборки
проект строится и запускается в режиме отладки и выпуска
он создает exe в / build / helloWorld / Debug / и / build/helloWorld / Release (которые работают)
не работает:
- VS говорит, что он скопировал exe в /bin / helloWorld.exe, но это не >:-(
.
1>------ Начало сборки: проект: ZERO_CHECK, конфигурация: Release Win32 ------
2>------ Начало сборки: проект: ALL_BUILD, конфигурация: Release Win32 ------
2> построить все проекты
3>------ Начало сборки: проект: установка, конфигурация: выпуск Win32 ------
3 > -- Установка конфигурации:"Release"
3 > -- Up-to-date: / bin / helloWorld.exe
========== сборка: 3 успешно, 0 не удалось, 1 обновлено, 0 пропущено ==========
.
Я знаю, что это кажется суетливым, но я пытаюсь убедиться, что я понимаю все, что происходит, прежде чем катиться в более сложные вещи (P.S. Я использую клиент cmake не командной строки).
1 ответов
это, вероятно, просто сводится к опечатке. В последней строке source/helloWorld / CMakeLists.txt я думаю, вы имели в виду PROJECT_BINARY_DIR
, а не PROJECT_BINARY_BIN
?
то, что здесь происходит, это ${PROJECT_BINARY_BIN}/bin
разрешает /bin
(разыменование неопределенной строки в CMake, к сожалению, не генерирует предупреждение) и /bin
- абсолютный путь. Если ваш проект находится на диске C:, я ожидаю, что вы найдете это C:\bin\helloWorld - ... exe фактически тут exist: VS не был врут вам: -)
как и в стороне, обычно указывается относительный путь в install
команда, позволяющая пользователю выбрать корень установки. Аналогично, это не очень удобно для жесткого кода CMAKE_INSTALL_PREFIX
(по крайней мере без предупреждения).
в этом случае, я бы сменил в:
install (TARGETS helloWorld RUNTIME DESTINATION bin)
и удалить set(CMAKE_INSTALL_PREFIX ...)
из источника/CMakeLists.формат txt.
скажем, корень вашего проекта C:\myProject, затем из командной строки VS, вы можете сделать:
cd C:\myProject\build
cmake -DCMAKE_INSTALL_PREFIX="C:\myProject\build" ..\source
cmake --build . --config Release --target INSTALL
bin\helloWorld.exe