目前,我在主文件夹中有一个CMakeLists.txt文件,其中包含以下代码:
cmake_minimum_required(VERSION 3.5)
SET(CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE)
SET(CMAKE_TOOLCHAIN_FILE ${PROJECT_SOURCE_DIR}/ToolChain.cmake)
project(Blinky)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
...
当我运行它时,它首先将Visual Studio输出到源目录。当我第二次运行它时,它会输出相应的minGW makefile但仍然是源目录而不是bin文件夹。有没有办法将它配置为直接构建MinGW Makefile和正确的输出文件夹?
我在命令行提示符下运行脚本,并使用源目录文件夹中的以下代码行:
cmake CMakeLists.txt
答案 0 :(得分:0)
您不应该从源目录运行cmake。这绝对是一种不好的做法
实际上,这会将您的makefile(或您的Visual Studio文件)与您的源文件混合在一起,甚至可能损坏您的源目录(取决于您在CMakeLists.txt中指定的内容)。
你需要做什么
首先,您需要创建一个单独的构建目录,您将在其中启动cmake。
然后,如果要使用MinGW makefile生成,请在build目录中启动以下命令行:
cmake path_to_source_directory -G "MinGW Makefiles"
关于您的CMakeList.txt的进一步评论
由于上面的命令行指定了生成器(选项-G“...”),SET(CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE)
是无用的。看看this SO post and its answers。它解释了为什么在第二次启动时首次启动CMake和MinGW makefile时生成Visual Studio文件。
然后,正如@Craig Scott所说,你应该用SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
替换SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
。否则,您的可执行文件将放在源目录中。
答案 1 :(得分:0)
从您要用作构建目录的目录运行cmake,而不是从源树中运行。这将为您提供源代码构建(有关此内容的详细信息,请参阅here。)
您必须在命令行中设置要使用的CMake生成器和工具链文件,而不是在CMakeLists.txt文件中执行此操作。此外,您不在cmake命令行中包含CMakeLists.txt文件的名称,而是包含它所在的目录。例如:
cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=/path/to/source/dir/ToolChain.cmake /path/to/source/dir
最后,为了指定可执行文件的位置,请确保使用correct CMake variables并确保将它们放在构建目录中的某个位置,而不是源树:
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)