cmake无法构建简单的项目

时间:2015-07-15 10:39:46

标签: c cmake

我在cmake中使用clion 1.0并尝试构建简单的演示项目。但是cmake不希望将外部.c文件链接到main.c。

系统:Xubuntu 14.04

的main.c

#include "common/source_file.h"

void SetupRC()
{
    Cmake_dermo(1);
}

int main(int argc, char* argv[])
{
    SetupRC();

    return 0;
}

的CMakeLists.txt

cmake_minimum_required(VERSION 3.2)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(mytest common/source_file.h common/source_file.c ${SOURCE_FILES})

source_file.c

#include "source_file.h"

void Cmake_dermo(int da)
{
    da += 1;
}

有什么问题?

2 个答案:

答案 0 :(得分:1)

您在CMakeLists.txt文件中使用了错误的文件名。

更改CMakeLists.txt中的行:

set(SOURCE_FILES main.cpp)

为:

set(SOURCE_FILES main.c)

答案 1 :(得分:1)

我试过你CMakeList.txt我得到了

  

在函数SetupRC()中:   main.cpp :(。text + 0xa):对Cmake_dermo(int)的未定义引用

问题来自不同语言混合的事实:

  • main.cpp是C ++,编译器是C ++编译器。
  • source_file.c是C,因为它是.c文件。

要包含引用C的标题,请阅读this question。更正后的main.cpp文件如下所示:

extern "C"
{
  #include "common/source_file.h"
}

void SetupRC()
{
  Cmake_dermo(1);
}

int main(int argc, char* argv[])
{
  SetupRC();

  return 0;
}

头文件如下所示:

#ifndef SOURCE_FILE_H_   /* Include guard */
#define SOURCE_FILE_H_

void Cmake_dermo(int da);

#endif // SOURCE_FILE_H_

似乎Cmake在不对CMakeList.txt进行任何修改的情况下处理不同的语言。