Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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
C++ 获取CMake中当前宏文件的文件_C++_Cmake_Path_Include - Fatal编程技术网

C++ 获取CMake中当前宏文件的文件

C++ 获取CMake中当前宏文件的文件,c++,cmake,path,include,C++,Cmake,Path,Include,我正在编写一个.cmake文件,该文件处理大量内容,并且需要访问位于.cmake文件固定相对路径中的可执行文件。在本例中,组织结构如下所示: CMakeLists.txt - cmake - tools.cmake - bin - exectuable.exe 问题是tools.cmake是使用include包含的,因此,cmake\u CURRENT\u SOURCE\u DIR返回CMakeLists.txt的目录。我不想硬编码路

我正在编写一个.cmake文件,该文件处理大量内容,并且需要访问位于.cmake文件固定相对路径中的可执行文件。在本例中,组织结构如下所示:

CMakeLists.txt 
   - cmake
       - tools.cmake 
       - bin
           - exectuable.exe
问题是
tools.cmake
是使用
include
包含的,因此,
cmake\u CURRENT\u SOURCE\u DIR
返回
CMakeLists.txt的目录。我不想硬编码路径的原因是我想把
tools.cmake
和二进制文件放在一个单独的GIT存储库中,我不想强迫用户将其放在某个特定的文件夹中

我现在能想到的唯一解决方案是提供一个函数,用于设置和存储
tools.cmake
的路径。这不太优雅。

回答如下:

CMAKE\u JUCE\u TOOLS\u PATH
不会在
TOOLS.CMAKE中的函数或宏中返回正确的路径,但会在任何函数之外返回正确的路径。所以我们可以

set(PATH_TO_TOOLS_CMAKE ${CMAKE_JUCE_TOOLS_PATH})

在变量中可以访问路径时存储路径,而在函数和宏中访问
path\u to\u TOOLS\u CMAKE
则是
CMAKE\u CURRENT\u LIST\u FILE
CMAKE\u CURRENT\u LIST\u DIR
您要查找的变量,他们返回的不是
tools.cmake
,而是
CMakeLists.txt
,其中包含
tools.cmake
。我可以让用户使用属性手动将变量存储到路径中,从而让它工作。但我真的想跳过这一步。真的,该死。但是是的,我会添加一个答案并标记为dup