c++ cmake thrift

c++ - CMake Diferencia entre include_directories y add_subdirectory?



thrift (1)

Estoy aprendiendo CMake para construir código C ++ y luchando con el siguiente concepto. En mi directorio de nivel raíz tengo algunos archivos cpp y un CMakeLists.txt que genera con éxito un código de ahorro en un directorio gen-cpp. Mi nivel de raíz CMakeLists.txt contiene:

include_directories ("path-to-root" / gen-cpp). (Junto con el thrift relevante de autogeneración e incluye.

Todo se compila, pero obtengo errores vinculados a la biblioteca dinámica en tiempo de ejecución para un símbolo no definido que hace referencia a una clase definida en el directorio gen-cpp. Cuando muevo los archivos en el directorio al nivel raíz, se ejecuta bien. ¿Qué me estoy perdiendo? (También ajusté el #include en el directorio raíz cpp directorie s para que apunte a "path-to-root" / gen-cpp).

¿Es este un malentendido el uso de include_directory, donde debería estar usando add_subdirectory? Si es lo último, ¿el código en gen-cpp necesita su propio CMakeLists.txt? ¿Por qué no se necesita este archivo adicional, cuando los contenidos de dicho directorio son de nivel raíz?


El include_directories() se usa para agregar rutas de búsqueda de encabezados ( -I flag) y add_subdirectory() no hará ninguna diferencia en este caso.

Supongo que debe listar los archivos * .cpp de la carpeta gen-cpp en las add_executable() o add_library() , en las que desea que add_library() estos símbolos.

Alternativamente, puede compilar todas las fuentes de ahorro en la biblioteca y vincularlo con su código.