C++ 混合C和C++;与CMAKE
我们主要用C++ 混合C和C++;与CMAKE,c++,c,gcc,g++,cmake,C++,C,Gcc,G++,Cmake,我们主要用C编写应用程序,但有些子模块是用C++编写的(在Linux上)。问题是如何编写CMakeLists.txt文件,以便对某些子目录使用g++,对另一个子目录使用gcc。g++和gcc之间的区别基本上是g++将-lstdc++传递给链接器。只需将C++标准库添加为C++模块的显式依赖项。 明确,GCC可以编译C++代码。gcc和g++在这方面是相同的。不同之处在于,当使用g++时,您不必显式地告诉编译器链接到libstdc++。您可以将源文件的语言属性设置为“CXX”。请参阅。如果没有其他
C
编写应用程序,但有些子模块是用C++
编写的(在Linux上)。问题是如何编写CMakeLists.txt
文件,以便对某些子目录使用g++
,对另一个子目录使用gcc
。g++和gcc之间的区别基本上是g++将-lstdc++传递给链接器。只需将C++标准库添加为C++模块的显式依赖项。
明确,GCC可以编译C++代码。gcc和g++在这方面是相同的。不同之处在于,当使用g++时,您不必显式地告诉编译器链接到libstdc++。
您可以将源文件的语言属性设置为“CXX”。请参阅。如果没有其他设置,编译器和链接器通常由文件扩展名确定。因此,只要文件结尾没有问题,代码就会被编译并与正确的编译器链接在一个旁注,记住正确的外部C声明,如果你混合C和C++。
< P> CFAUK自动地这样做。您可以在CMakeLists.txt文件中自由混合这两种类型的文件:. . .
add_executable(
my_program
code.cpp
more_code.c
)
我一直都这样做,而且很有效 CMake应使用文件扩展名指定的相关编译器和链接器。在编译和链接到C和C++的可执行文件的情况下,你会说:
add_executable(MyEXE main.cpp myFile.c)
我想补充一点微不足道的问题
在本例中,必须确保项目具有正确的语言名称参数,即1:
添加CMake文件时应自动执行此操作,但根据添加文件的顺序,参数可能仅包括C或CXX
如果您仅将实例C作为语言参数,并且您的int main()
位于main.cpp中,那么您的程序入口点将不存在,编译器将忽略一个错误
1或您可以省略语言参数,在这种情况下,选择C和CXX的默认参数。见谢谢,我已经改写了问题。这部分没问题,但我想知道,如何为特定子目录指定gcc/g++。如果您可以只使用gcc,并在必要时显式依赖libstdc++,那么在某些子目录上使用g++有什么必要?@James:gcc可以充当g++的前端:编译器是从文件扩展中选择的。请注意,您需要C-header保护。因此,在code.cpp中,你会说
extern“C”{include“more_code.h”}
“如果没有其他设置”,即在CMakeLists.txt
的顶部,使用project(myproject)
而不是说project(myproject C)
@congusbongus你救了我一天!
project(MyProject C CXX)