Es ist mein Verständnis, dass auf das Verzeichnis verweisen sollte, in dem Binärdateien für die aktuelle CMakeLists.txt-Datei platziert werden. Dies scheint jedoch nicht der Fall zu sein.Warum werden Binärdateien nicht in CMAKE_CURRENT_BINARY_DIR platziert?
diese Dateistruktur vor:
CMakeTest
+- CMakeLists.txt
+- main.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
add_executable(CMakeTest main.cpp)
message(STATUS "CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!";
return 0;
}
Auf der (Windows) Befehlszeile Ich betreibe folgende Befehle: die Linie
md build
cd build
cmake .. -G "Visual Studio 14 2015"
cmake --build .
Die ersten cmake
Befehl druckt (unter anderem)
CMAKE_CURRENT_BINARY_DIR = X:/dev/projects/CMakeTest/build
Also würde ich erwarten Die resultierende Binärdatei CMakeTest.exe endet dort. Wirklich, aber es ist in X platziert:/dev/projects/CMakeTest/Build/Debug.
Warum wird die Binärdatei nicht in platziert, aber in einem Unterverzeichnis? Und gibt es eine CMake-Variable, die mir sagt, was dieses Unterverzeichnis ist?
Edit:
Ich versuche nicht zu Änderung das Verzeichnis, in dem Binär-Dateien platziert werden. Ich versuche es zu bestimmen. Der Grund dafür ist:
Während des Builds wird eine Anzahl zusätzlicher Ressourcendateien im selben Verzeichnis wie die ausführbare Datei erstellt. (Dieser Teil funktioniert.) Ich möchte den Befehl install(FILES, ...)
verwenden, um diese Dateien dann zum resultierenden Paket hinzuzufügen. Also muss ich den tatsächlichen Pfad übergeben, wo die Binärdateien platziert werden install(FILES, ...)
.
Ich denke, das ist ein Manko des MSVC-Generators. – arrowd
Ich glaube, das ist eine gute Sache .. Ich meine mit Debug und Release ausführbar inkompatibel und wahrscheinlich benannt das gleiche sein Bestes, um sie in separaten Ordnern zu halten. Denken Sie daran, dass Sie in MSVC standardmäßig 4 Konfigurationen haben. – drescherjm
@arrowd: Es scheint kein Generatorproblem zu sein. Die Verwendung des Xcode-Generators unter OS X hat das gleiche Ergebnis. –