C++ 为什么可执行文件输出路径不工作?

C++ 为什么可执行文件输出路径不工作?,c++,build,cmake,C++,Build,Cmake,我有这样的档案 . ├── CMakeLists.txt └── src ├── CMakeLists.txt └── main.c 这是关于这些文件的内容 $ cat CMakeLists.txt cmake_minimum_required(VERSION 3.5) PROJECT (HELLO) ADD_SUBDIRECTORY(src bin) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/binarydir) $

我有这样的档案

.
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    └── main.c
这是关于这些文件的内容

$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
PROJECT (HELLO)
ADD_SUBDIRECTORY(src bin)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/binarydir)

$ cat src/CMakeLists.txt
ADD_EXECUTABLE(hello main.c)

$ cat src/main.c
#include <stdio.h>
int main()
{
    printf("Hello World from t1 main().\n");
    return 0;
}
这是结果目录结构


然后二进制文件
hello
将在目录
build/bin
中生成,如图所示,但它应该在
build/binarydir
中,因为我已经
设置了
可执行文件输出路径的值,不是吗?我错过了什么?

在设置
可执行输出路径之前,您正在创建可执行目标。将
SET(EXECUTABLE\u OUTPUT\u PATH${PROJECT\u BINARY\u DIR}/binarydir)
行移动到
ADD\u子目录(src bin)

变量之前是一种旧方法。新代码应该更喜欢。@Tsyvarev您的意思是
SET(CMAKE\u RUNTIME\u OUTPUT\u DIRECTORY${PROJECT\u BINARY\u DIR}/binarydir)
对您有效?否,设置变量仍然必须在
add\u subdirectory
调用之前进行。但是与其使用
EXECUTABLE\u OUTPUT\u PATH
变量,不如将
CMAKE\u RUNTIME\u OUTPUT\u目录设置为一个。
$ mkdir build
$ cd build
$ cmake ..
$ make