кажется, мои знания линковки в плюсах слегка заржавели, опять
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(link)
add_executable(test main.cpp foo-test.cpp)
add_library(lib foo-real.cpp)
target_link_libraries(test PRIVATE lib)
$ cat main.cpp
#include "foo.h"
int main() { return foo(); }
$ cat foo.h
#pragma once
int foo();
$ cat foo-real.cpp
int foo() { return 0; }
$ cat foo-test.cpp
int foo() { return 1; }
$ cmake --build b
[5/5] Linking CXX executable test
$ ./b/test; echo $?
1
почему здесь нет бабаха про
multiple definitions: foo@real.cpp, foo@test.cpp
?..