проект установки 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