C++ 如何向g++;编译器读取';包括';用于从';列表';文件

C++ 如何向g++;编译器读取';包括';用于从';列表';文件,c++,g++,C++,G++,也许最好详细说明这个问题 所以我有一个编译行,比如: g++ -std=c++11 -c main.cxx 然后,由于main.css坚持加载“header.h”,这将在“search_dir”中查找,而“search_dir”不是STL的一部分,因此我需要在编译选项中“include”search dir,如: g++ -std=c++11 -c main.cxx -I/path/to/search_dir 然后说我有30个搜索目录(搜索目录1..search目录30) 因此,我会将其包

也许最好详细说明这个问题

所以我有一个编译行,比如:

g++ -std=c++11 -c main.cxx 
然后,由于main.css坚持加载“header.h”,这将在“search_dir”中查找,而“search_dir”不是STL的一部分,因此我需要在编译选项中“include”search dir,如:

g++ -std=c++11 -c main.cxx -I/path/to/search_dir
然后说我有30个搜索目录(搜索目录1..search目录30)

因此,我会将其包括为:

g++ -std=c++11 -c main.cxx -I/path/to/search_dir1 -I/path/to/search_dir2 .....  -I/path/to/search_dir30
命令行变得异常长且无法读取。因此,是否有一个选项可以保存所有:

/path/to/search_dir1
/path/to/search_dir2
...
/path/to/search_dir30
输入一个名为“my_search_dirs”的文件,然后告诉g++类似的内容:

g++ -std=c++11 -c main.cxx -If=my_search_dirs
g++ -std=c++11 -c main.cxx `while read line; do printf "%c-I$line "; done < file.txt`
当然,我“发明”了选项-If(比如:“包含包含搜索目录列表的文件”)

我已经阅读了手册,研究了网络和堆栈溢出,没有发现任何远程询问或讨论(或回答)的内容


在g++中有这样的选项吗?

您可以这样做:

g++ -std=c++11 -c main.cxx -If=my_search_dirs
g++ -std=c++11 -c main.cxx `while read line; do printf "%c-I$line "; done < file.txt`
g++-std=c++11-c main.cxx`读取行时;打印“%c-I$行”;完成
使用包含所有目录的file.txt

像这样

创建一个具有任意名称的文件,例如,
cc_opts
,其中包含所需的所有
-Idir
选项 需要,就像你在命令行上写的一样,或者,如果你愿意的话,是坏的 多行。例如

cc_选项

-I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3
-I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3
将其保存到构建目录。然后,在编译器命令行中,替换:

-I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3
与:

然后gcc/g++将从
cc_opts
中读取选项,并在 命令行取代了
@cc_选项

您可以在
@
-文件中包括您喜欢的任何选项,而不仅仅是
-I
-选项

在利用这一便利之前,请记住,当您需要 调试由生成日志引导的自动生成的失败,可能会更复杂 以下内容对您很有帮助:

g++ ... -I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3 ...
比:

以及由以下各项组成的建筑系统:

Makefile

...
CPPFLAGS := -I/path/to/search_dir1 \
            -I/path/to/search_dir2 \
            -I/path/to/search_dir3
...
    ...
    CPPFLAGS := @inc_opts
    ...
比由以下各项组成的系统更清晰、更稳健:

Makefile

...
CPPFLAGS := -I/path/to/search_dir1 \
            -I/path/to/search_dir2 \
            -I/path/to/search_dir3
...
    ...
    CPPFLAGS := @inc_opts
    ...
以及:

inc\u选择

-I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3
-I/path/to/search_dir1 -I/path/to/search_dir2 -I/path/to/search_dir3

这些注意事项解释了哪些GCC
@
-文件很少出现。

为什么不使用Makefile,包括搜索目录?在编译main.cxx所依赖的多个文件时,您提到的同样问题也会出现。因为Makefile,我要问这个问题。因为Makefile行变得疯狂…将行打断为多行,每行末尾都有反斜杠。将行打断为多行。。。。。这就是我目前所做的,但它看起来非常不雅观:(也许Makefile看起来不雅观。也许它只是需要工作。除了使用一个include文件的想法之外,在某个时候,您必须写下每个目录。在我看来,使用bash的方法更不雅观,因为您还必须写下所有内容(除非您真的使用了dir1、dir2等),否则哪一个更不雅观(您看到这是怎么回事了吗?)。我怀疑bash脚本最终会起到解救作用。希望不需要朝那个方向走。但是,嘿!这个世界是务实的,既然可以在外部“修复”它,为什么还要费心设置功能。无论如何,感谢你的想法和方法。这是一个非常有趣的选择。谢谢你!还没有尝试过,但这就是我正在寻找的或者,问题是不创建目标的实验,也许一旦尝试了不同的库,我就可以将其最小化(因此你称之为“健壮”或“用户友好”的方法).通常,这是部署某些东西之前的最后一步,但在此之前,我需要一种简单的方法来试验搜索列表。这也证明了gcc有一个选项,我就是找不到它。