Estoy compilando la aplicación C++ con CMake. Pero utiliza algunos archivos de código fuente en C. A continuación se estructura simplificada:Vinculación de archivos C y CXX en CMake
tronco/CMakeLists.txt:
project(myapp)
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -g -Wall")
add_subdirectory (src myapp)
trunk/src/main.cpp:
#include "smth/f.h"
int main() { f(); }
trunk/src/CMakeLists.txt:
add_subdirectory (smth)
link_directories (smth)
set(APP_SRC main)
add_executable (myapp ${APP_SRC})
target_link_libraries (myapp smth)
trunk/src/smth/FH:
#ifndef F_H
#define F_H
void f();
#endif
trunk/src/Smth/fc:
#include "f.h"
void f() {}
trunk/src/Smth/CMakeLists.txt
set (SMTH_SRC some_cpp_file1 some_cpp_file2 f)
add_library (smth STATIC ${SMTH_SRC})
El problema es: i ejecutar gmake, que compila todos los archivos y cuando se une a todos juntos libs, me sale:
undefined reference to `f()` in main.cpp
si cambio el nombre de FC en f.cpp todo va bien. ¿Cuál es la diferencia y cómo manejarlo?
Gracias
Una buena lectura sobre esto: 'Mezcla de C y C++:' http://www.parashift.com/c++faq-lite/mixing-c-and-cpp.html – Lazer