c++ cmake clion header-only

c++ - En CLion, la biblioteca de solo encabezado: archivo "no pertenece a ningún objetivo del proyecto, las funciones de información de código podrían no funcionar correctamente"



cmake header-only (3)

Poco fondo

Estaba teniendo el mismo problema, aunque el proyecto no era solo de cabecera, sin embargo, los archivos abiertos de la carpeta inc lanzaban la advertencia mencionada anteriormente, a pesar de que el archivo CMake marcaba claramente que esa carpeta era include_directory .

* Los archivos .hpp no ​​pertenecen a $ {SOURCE}

include_directories("${PROJECT_SOURCE_DIR}/inc/") add_subdirectory(src) add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE})

Dado que este es un archivo de CMake perfectamente válido y agregar los archivos de inclusión a los archivos de origen no es idiomático, no quería modificar el archivo de CMake.

La solución

Como se describe en el foro oficial de JetBrains , el archivo de CMake es realmente válido y la advertencia se muestra debido a la incapacidad de CLion para indexar correctamente los archivos de encabezado. La solución sugerida extraída del enlace es hacer clic con el botón derecho en la carpeta y Mark directory as | Library Files / Project Sources and Headers .

Por lo tanto, este encabezado no se incluye en los ejecutables y CLion le notifica que algunas características de información de código podrían no funcionar correctamente. Como solución alternativa, puede usar "Marcar directorio como" Archivos de biblioteca / Fuente del proyecto y Encabezados para la carpeta.

Tengo un proyecto de biblioteca de solo encabezado configurado con el comando cmake:

add_library(my_library INTERFACE)

y tambien agregué

target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})

pero cuando abro un archivo fuente, recibo la advertencia:

Este archivo no pertenece a ningún objetivo del proyecto, las funciones de información de código podrían no funcionar correctamente

y pierdo mucha funcionalidad en cosas como la finalización de código.

¿Cuál es la forma correcta de configurar esto para que CLion proporcione su funcionalidad habitual en una biblioteca de solo encabezado?


Clion toma información sobre los archivos de origen del sistema de compilación CMake. Cuando agrega cualquier archivo cpp a la lista de fuentes, CMake informa automáticamente sobre el encabezado con el mismo nombre. Por lo tanto, si los nombres de cpp / h difieren (o no tiene ningún archivo de cpp), debe incluir el encabezado manualmente.

set(Sources my_lib.cpp) set(Headers header_of_my_lib.h) add_executable(superlib ${Sources} ${Headers})

Si no tiene ningún ejecutable, puede omitir la última línea, CLion aún sabrá acerca de los archivos


Puede agregar los archivos de encabezado a su proyecto de esta manera:

set(SOURCE_FILES main.cpp MyClass1.cpp MyClass1.h MyClass2.cpp MyClass2.h)

También puedes configurarlo en varios pasos así:

set(SOURCE_FILES main.cpp) set(SOURCE_FILES ${SOURCE_FILES} MyClass1.cpp MyClass1.h) set(SOURCE_FILES ${SOURCE_FILES} MyClass2.cpp MyClass2.h)

Aunque como se menciona en los comentarios, probablemente no debería agregar los archivos de encabezado a su proyecto.