Создать два исходных файла с одинаковыми именами

#c #cmake

#c #cmake

Вопрос:

Вопрос довольно прост, если у меня есть проект CMake со следующей структурой

sources/foo.cpp

sources/bar/foo.cpp

Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?

Комментарии:

1. «Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?» — Да, CMake гарантирует это. То есть, если бы вы столкнулись с какой-то проблемой в этой области, тогда вы могли бы заполнить bugreport для CMake, и они исправят проблему в 99% случаев (остальные 1% случаев относятся к «невозможно исправить»). Обратите внимание, что некоторые генераторы CMake создают смешные имена для объектных файлов, созданных из источников с «повторяющимися» именами. Но какими бы ни были имена объектных файлов, их привязка должна выполняться безупречно.

Ответ №1:

Гарантирует ли cmake отсутствие конфликтов компиляции с одинаковыми именами файлов в разных каталогах?

Cmake без проблем будет работать с двумя файлами с одинаковыми именами. Было бы довольно бесполезно, если бы это было не так.

Что касается «гарантий», из cmake licensing:

CMake распространяется по одобренной OSI лицензии BSD с 3 пунктами.

В конце лицензии BSD 3 и в cmake sources/copyright.txt вы можете прочитать:

ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ ПРАВООБЛАДАТЕЛЯМИ И УЧАСТНИКАМИ «КАК ЕСТЬ», И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, НЕ ПРИНИМАЮТСЯ. […]

Программное обеспечение бесплатное, и никаких гарантий нет.

Ответ №2:

Да, cmake обрабатывает это

Я создал 3 файла:

 codeTest.h
codeTest.cpp
src/codeTest.cpp
 

определил функцию, которая печатает данные codeTest.cpp в корневом каталоге, и определил функцию «main» в src/codeTest.cpp и использовал функцию печати в «main», затем скомпилировал ее с помощью cmake

 add_executable(codeTest src/codeTest.cpp codeTest.cpp)
 

и это сработало

codeTest.h

 #ifndef CODETEST_H_
#define CODETEST_H_


#include<stdio.h>

void printTest();

#endif /* CODETEST_H_ */
 

codeTest.cpp

 #include <../codeTest.h>

void printTest()
{
    printf(" void printTest() n");
}
 

src/codeTest.cpp

 #include <../codeTest.h>

int main()
{
    printTest();
    return 1;
}