2

我目前正在进行一个 BF 解释器项目。我决定使用 CMake,它工作正常。我按照以下树确定了源外构建:

+ Project root
|
+-- src/
+-- bin/
+-- build/ <- holds the "rubbish" generated by CMake when generating the Makefile
+-- CMakeLists.txt

当我想构建项目时,我从项目的根文件夹运行:

cd build
cmake ..
make

在 CMakeLists.txt 中,我添加了以下行:

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

但是,我发现它在 build/bin 文件夹中输出二进制文件,所以我将这一行编辑为:

SET(EXECUTABLE_OUTPUT_PATH "../bin/"

它工作得很好,但恕我直言,有点丑陋。是否有任何“干净”的方式来做到这一点,即不对项目的结构做出假设,而是使用类似的东西set(EXECUTABLE_OUTPUT_PATH ${PROJECT_ROOT}/bin")?提前感谢您的回复,并对我可能犯的任何英语错误表示歉意,因为英语不是我的第一语言。

4

1 回答 1

3

您可以设置变量CMAKE_RUNTIME_OUTPUT_DIRECTORY来实现这一点 - 例如:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

基本上,${PROJECT_ROOT}您要查找的变量是PROJECT_SOURCE_DIRCMAKE_SOURCE_DIRCMAKE_CURRENT_SOURCE_DIR。每个都有略微不同的含义,但对于一个基本项目,它们很可能都指向同一个目录。

请注意,要使CMAKE_RUNTIME_OUTPUT_DIRECTORY变量生效,必须在创建目标之前设置它,即在add_executableCMakeLists.txt 中的调用之前。

另请注意,像 MSVC 这样的多配置生成器仍会将每个配置目录附加到此project root/bin文件夹。

于 2013-03-31T16:31:31.123 回答