Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Precompiled header for c++ project with a .c file [linux]



  • Hello,
    I have a c++ project with precompiled header (stdafx.h) that compile fine. However, after adding a .c file to my project, it fails at compiling stdafx on

    #include <map>
    

    The new .c /.h files are completely independant from the other files, i.e. there is no include at all (beside <stdlib.h>) but it still try to build stdafx for a c project.

    The command from console log without the .c file :

    g++ -pipe -DQT_COMPILING_QSTRING_COMPAT_CPP -Wsuggest-override -Werror=suggest-override -isystem "/opt/Qt5.7.1/5.7/gcc_64/include/QtCore" -isystem "/opt/Qt5.7.1/5.7/gcc_64/include/QtWidgets" -isystem "/opt/Qt5.7.1/5.7/gcc_64/include/QtSerialport" -isystem "/opt/Qt5.7.1/5.7/gcc_64/include/QtTestlib" -isystem /opt/Qt5.7.1/5.7/gcc_64/include/qt5 -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DTEST_LIBRARY -DQT_USE_QSTRINGBUILDER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_SERIALPORT_LIB -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR='"/home/dlevy/Perforce/dlevy_Builder04_LC3.3_main/Qt/main/Test"' -I. -I../TestTech -I../Common -I../Ltp_Production -I../LC4/main/src -I../LC4/main/src/Test -I../LC4/main/src/TestPrototypes -I../LC4/main/src/TestPrivate -I../LC4/main/src/TestTech -I../LC4/main/src/shared -I../LC4/main/src/shared/comm -I/opt/Qt5.7.1/5.7/gcc_64/include -I/opt/Qt5.7.1/5.7/gcc_64/include/QtWidgets -I/opt/Qt5.7.1/5.7/gcc_64/include/QtGui -I/opt/Qt5.7.1/5.7/gcc_64/include/QtSerialPort -I/opt/Qt5.7.1/5.7/gcc_64/include/QtTest -I/opt/Qt5.7.1/5.7/gcc_64/include/QtCore -IRelease -I/opt/Qt5.7.1/5.7/gcc_64/mkspecs/linux-g++ -x c++-header -c StdAfx.h -o Release/Test.gch/c++
    

    and with the .c file :

    gcc -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DTEST_LIBRARY -DQT_USE_QSTRINGBUILDER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_SERIALPORT_LIB -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR='"/home/dlevy/Perforce/dlevy_Builder04_LC3.3_main/Qt/main/Test"' -I. -I../TestTech -I../Common -I../Ltp_Production -I../LC4/main/src -I../LC4/main/src/Test -I../LC4/main/src/TestPrototypes -I../LC4/main/src/TestPrivate -I../LC4/main/src/TestTech -I../LC4/main/src/shared -I../LC4/main/src/shared/comm -I/opt/Qt5.7.1/5.7/gcc_64/include -I/opt/Qt5.7.1/5.7/gcc_64/include/QtWidgets -I/opt/Qt5.7.1/5.7/gcc_64/include/QtGui -I/opt/Qt5.7.1/5.7/gcc_64/include/QtSerialPort -I/opt/Qt5.7.1/5.7/gcc_64/include/QtTest -I/opt/Qt5.7.1/5.7/gcc_64/include/QtCore -IRelease -I/opt/Qt5.7.1/5.7/gcc_64/mkspecs/linux-g++ -x c-header -c StdAfx.h -o Release/Test.gch/c
    

    I noticed at the end of the command that cxx-header became c-header.

    Is there something I am not doing correctly?

    Additionnal info:
    -No problem on windows
    -The header for the .c file is surounded by extern C



  • After reading the doc again, I found that I need to add

    #if defined __cplusplus
    /* Add C++ includes here */
    

    in my stdafx file. There is nothing related to the .c file, but I guess the compiler parse it once for the .c file, and another time for the .cpp files.



  • After reading the doc again, I found that I need to add

    #if defined __cplusplus
    /* Add C++ includes here */
    

    in my stdafx file. There is nothing related to the .c file, but I guess the compiler parse it once for the .c file, and another time for the .cpp files.


Log in to reply