使用宏简化 C++ 包含

Simplify C++ inclusion with macros

考虑一个带有 include 文件夹的 C++ 项目,其中放置了多个存储库的源代码,我如何简化它们在主文件中的包含?

我试过这样的事情:

// config.h
#define SOMEPROJ_SRC_PATH "include/someproj/src/"
#define EXPAND_PATH(root, filepath) #root #filepath

//main.cpp
#include EXPAND_PATH(SOMEPROJ_SRC_PATH, "folder/header.h")

但是好像不能正常使用

那么,我应该在这些指令中修改什么才能使它们正常工作?

正确的方法是将 SOMEPROJ_SRC_PATH 作为带有 -I 选项的包含文件的搜索路径传递。

main.cpp:

#include <iostream>

#include "some.h"

int main() {
    std::cout << HELLO << std::endl;
}

/some/path/some.h:

#define HELLO "Hello, world!"

然后编译:

g++ -I /some/path -o main main.cpp 

首先修复chris评论中指出的问题
IE。将 '' 替换为 "".

然后去掉多余的“stringifying”#s.

#include <stdio.h>
#define SOMEPROJ_SRC_PATH "include/someproj/src/"
#define EXPAND_PATH(root, filepath) root filepath

int main(void)
{
    printf(EXPAND_PATH(SOMEPROJ_SRC_PATH, "Hello World"));

    return 0;
}

此宏扩展为 "include/someproj/src/" "Hello World",这是根据正常的字符串处理机制连接的,因此输出为

include/someproj/src/Hello World

但实际上,仔细阅读 (这里的其他答案)的建议,我支持这种替代方法。