![](/img/trans.png)
[英]How can I compile with different version of g++ in c++ Autotools project
[英]Can I instruct g++ to compile a c++ source file with a different extension than “.cpp” etc?
我正在编写一个可以配置为仅 CPU 实现或混合 CPU-GPU 实现的库/框架。 例如,假设我有以下文件:
LibraryMainCode.cpp
LibraryMainCode.h
Numerics.cpp
Numerics.h
对于仅 CPU 的实现,构建很简单:
g++ -I. -c Numerics.cpp -o Numerics.o
g++ -I. -c LibraryMainCode.cpp -o LibraryMainCode.o
(linking, etc)
对于混合实现,构建有点复杂:
g++ -I. -c Numerics.cpp -o Numerics.o
g++ -I. -c LibraryMainCode.cpp -o LibraryMainCode.o
nvcc -I. -x cu -dc LibraryMainCode.cpp -o XLibraryMainCode.o
(linking, etc)
即,我将这些“混合”文件中的每一个编译两次,一次作为仅 cpu 的 object 和一次使用 gpu 代码。
但是,我的代码库增长非常迅速,我只想让文件扩展名决定文件的编译方式。 例如,我可以更改文件名:
LibraryMainCode.cpp
LibraryMainCode.h
Numerics.cppx
Numerics.h
然后,我的 makefile 可以简单地找到这些“.cppx”文件并进行相应的编译。 不幸的是,如果我编写一个扩展名为“.cppx”的简单“Hello World”程序,那么 g++ 将无法编译它。
我意识到 g++ 有一个公认的 c++ 扩展名列表,所以我可以对这些混合文件使用“.cxx”之类的东西,否则使用“.cpp”,但我想强调混合文件不一定是标准的 Z6CE809EACF90366 代码并且必须在makefile中有特殊处理。
有没有一种简单的方法可以强制指示 g++ 编译具有任意扩展名的源文件?
您可以使用-x <lang>
选项显式指定源文件的语言:
g++ -x c++ file.strange_extension
您可以在 makefile 中使用字符串变量,其中包括编译器选项并将其用于每个 cpp 文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.