Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在项目中输出二进制文件';使用cmake创建s根bin子文件夹_Linux_Cmake - Fatal编程技术网

Linux 在项目中输出二进制文件';使用cmake创建s根bin子文件夹

Linux 在项目中输出二进制文件';使用cmake创建s根bin子文件夹,linux,cmake,Linux,Cmake,我目前正在做一个BF口译员项目。我决定使用CMake,它工作正常。 我选择了一个源代码外构建,如下所示: + Project root | +-- src/ +-- bin/ +-- build/ <- holds the "rubbish" generated by CMake when generating the Makefile +-- CMakeLists.txt 在CMakeLists.txt中,我添加了以下行: SET(EXECUTABLE_OUTPUT_PATH ${PR

我目前正在做一个BF口译员项目。我决定使用CMake,它工作正常。 我选择了一个源代码外构建,如下所示:

+ Project root
|
+-- src/
+-- bin/
+-- build/ <- holds the "rubbish" generated by CMake when generating the Makefile
+-- CMakeLists.txt
在CMakeLists.txt中,我添加了以下行:

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
但是,我发现它在build/bin文件夹中输出二进制文件,因此我将该行编辑为:

SET(EXECUTABLE_OUTPUT_PATH "../bin/"
它工作得很好,但它,嗯,有点难看。有没有什么“干净”的方法可以做到这一点,也就是不用假设项目的结构,而是使用类似于
set(EXECUTABLE\u OUTPUT\u PATH${project\u ROOT}/bin”)
? 提前感谢您的回复,并对我可能犯的任何英语错误表示歉意,因为英语不是我的第一语言。

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

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
基本上,您要查找的
${PROJECT\u ROOT}
变量是,或。每个变量的含义稍有不同,但对于基本项目,它们可能都指向同一个目录

请注意,要使
CMAKE_RUNTIME_OUTPUT_目录
变量生效,必须在创建目标之前设置该变量,即在CMakeLists.txt中的
add_executable
调用之前

还要注意的是,像MSVC这样的多配置生成器仍然会将每个配置目录追加到此
项目根/bin
文件夹

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)