使用宏简化 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
但实际上,仔细阅读 (这里的其他答案)的建议,我支持这种替代方法。
考虑一个带有 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
但实际上,仔细阅读